Skip to content
Back to skills

Ddw Validate Spec

ASecurity

Validates that a spec/fix-plan is complete, coherent and consistent with its PRD, against the catalog's spec rules. Produces a disambiguation question for every FAIL. Trigger: /ddw-validate-spec, during DDW's PLAN phase.

  • 13 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 12, 2026
ai-agentspython

Security analysis

A100/100

Scanned October 12, 2026

npx -y skills add DiluxOne/dilux-agentic-workflow --skill ddw-validate-spec --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ddw Validate Spec?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ddw Validate Spec
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diluxone-ddw-validate-spec/badge)](https://www.skillsdirectory.com/skills/diluxone-ddw-validate-spec)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ddw-validate-spec
description: >
  Validates that a spec/fix-plan is complete, coherent and consistent with its PRD, against the
  catalog's spec rules. Produces a disambiguation question for every FAIL.
  Trigger: /ddw-validate-spec, during DDW's PLAN phase.
---

# Skill: /ddw-validate-spec

## Description
Validates that a spec/fix-plan is complete, coherent and consistent with its PRD, against the rules
in section 2 of `.ddw/rules/validation-rules.instructions.md`. Produces a concrete disambiguation
question for every FAIL.

## Inputs
- The path to the spec/fix-plan (an argument, or derived from the ticket:
  `docs/ddw/specs/spec-{ticket}.md` / `docs/ddw/specs/fix-{ticket}.md`)
- The PRD at `docs/ddw/prd/prd-{ticket}.md` (if `gates.define` is true and the tier is FEATURE)
- The `tier` from `.ddw-state.json`
- `.ddw/rules/validation-rules.instructions.md` (the rule catalog)

## The rules live in the catalog, not here

**`.ddw/rules/validation-rules.instructions.md` §2 is the single source of truth**: F-SPEC-01 to
F-SPEC-16 (FAIL) and W-SPEC-01 to W-SPEC-03 (WARNING). Do not re-derive criteria from memory and do
not duplicate them here — read the catalog and evaluate its rules mechanically, citing each rule's
ID in the report.

Summary of what each ID covers:

| ID | Fails when | Applies to |
|---|---|---|
| F-SPEC-01 | A PRD FR maps to no block | FEATURE |
| F-SPEC-02 | A PRD AC maps to no test in the spec | FEATURE |
| F-SPEC-03 | A PRD NFR has no technical strategy | FEATURE |
| F-SPEC-04 | A block lists no files | FEATURE |
| F-SPEC-05 | A block has no verifiable completion criterion | FEATURE |
| F-SPEC-06 | A block lists no tests | FEATURE |
| F-SPEC-07 | An endpoint has an incomplete contract | any |
| F-SPEC-08 | A schema has no constraints | any |
| F-SPEC-09 | Input with no documented validation | any |
| F-SPEC-10 | No error handling documented | all tiers |
| F-SPEC-11 | Dependencies between blocks/steps not declared | all tiers |
| F-SPEC-16 | A block documents an error that appears in no test of that block | all tiers |
| F-SPEC-12 | The spec contradicts the PRD | FEATURE |
| F-SPEC-13 | Terminology diverges from the PRD | FEATURE |
| F-SPEC-14 | A fix-plan has no regression test | FIX |
| F-SPEC-15 | A fix-plan has no rollback plan | FIX |

**F-SPEC-01 has no exceptions:** an approved FR with no coverage is a FAIL, never a WARNING. If the
requirement was deliberately deferred, it has to come out of the PRD first (with the user's
approval), through a corrective loop back to DEFINE.

**Tier modifier:** if `tier == "QUICK-FIX"`, none of `F-SPEC-*` applies — that tier has no PLAN
phase and no spec.

## Execution Protocol

The four steps are the catalog's — `.ddw/rules/validation-rules.instructions.md`, *How a validation
runs*. What follows is what they mean here.

1. **Run the validator — do not re-derive its rules yourself:**
   `python3 .ddw/scripts/validate_spec.py <spec-path> --tier <tier>`
   (under a plugin install, resolve `.ddw/scripts/` at the plugin's method path). Add
   `--prd <path>` if the spec's header table does not name its PRD.
   **Paste its output VERBATIM** as the body of your report — every row, every rule ID, nothing
   collapsed into a total. A run of this skill that shows no script output did not validate
   anything: the script is the validation, and a PASSED run writes the content-hashed receipt the
   `spec` gate demands — without it, the PLAN→CODE transition refuses.
2. The script marks F-SPEC-12 (contradicts the PRD) and F-SPEC-13 (terminology diverging from the
   PRD) as MANUAL: judge those two yourself, against the PRD, and state each verdict explicitly
   under the pasted output. For FIX, also judge whether the proposed solution addresses the declared
   root cause — a solution that does not is a FAIL.
3. **Fix and re-run, before asking anything.** Every ❌ is a mandatory loop: correct the spec, run
   the script again, repeat until zero FAILs. Attempt the ⚠️ too. Fix only what the rule names —
   inventing a requirement, a test or an endpoint to clear a check is a worse defect than the one it
   silences, and editing the catalog or the script to make a check pass is never a correction.
4. **Then ask about what is genuinely undecided**, with 2–4 concrete options and what each one
   means, in the user's language and not the repo's.
5. Show the whole table, the totals, the verdict and **the link to the full report** the script
   wrote next to the spec, and ask for approval. **Every run, including a re-validation of a spec
   that has not changed** — the receipt matching says the bytes are the same, not that anyone read
   what was checked.

If the spec is edited after validating, run the script again: the receipt is bound to the content,
and a stale one does not open the gate.

## Output Format

```
┌─────────────────────────────────────────────────────────────┐
│  /ddw-validate-spec [name] — [PASSED | FAILED (N questions)] │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  PRD coverage: (FEATURE only)                                │
│    ✅/❌ [ID]: FR-xx → [block or "NOT COVERED"]              │
│                                                              │
│  Per-block completeness:                                     │
│    ✅/❌/⚠️ [ID]: [what was checked]                          │
│       → [what is missing and how to fix it]                  │
│                                                              │
│  Consistency with the PRD:                                   │
│    ✅/❌/⚠️ [ID]: [what was checked]                          │
│                                                              │
│  Disambiguation questions:      (only if there are FAILs)    │
│                                                              │
│    Q1: [concrete question derived from the FAIL]             │
│        Options: a) ... b) ... c) ...                         │
│                                                              │
│  ────────────────────────────────────────────────────────────│
│  Total: X passed, Y failed, Z warnings                       │
│  Result: [PASSED if Y == 0 | FAILED if Y > 0]                │
│  Full report: docs/ddw/specs/spec-[ticket].validation.md     │
│  Next: [recommended action]                                  │
└─────────────────────────────────────────────────────────────┘
```

The **Full report** row is the path the script printed, always, so the user can read the complete
checklist instead of asking for it again.

## Result Rules

- **PASSED:** 0 FAILs. It may have WARNINGs.
- **FAILED (N questions):** 1+ FAILs. Each FAIL produces a disambiguation question.
- Questions must be concrete, with options where possible (a/b/c).
- The user answers → the answers are folded into the spec (via `ddw-create-spec` in update mode) →
  re-validate.
- A spec in the FAILED state cannot be approved.

## Updating .ddw-state.json
- Does not modify flags directly (the user's approval is what sets `gates.spec`).

## Language

Write the report in the language the user is working in, citing the rule IDs verbatim.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.