Step 4: Validate

Prove the definition is complete and pass the Definition Gate.

Skill: fireskill-04-validate · Asks questions: only if it must go back to the backlog · Changes: the header and section 13 of spec.md; moves the spec to specs/defined/

When to use it

The spec is written and you want to know whether it is ready to be planned. The flow reaches this step by itself after Step 3.

What to type

Use $fireskill-04-validate para auditar specs/<estado>/<NNNN>-<slug>/spec.md, seu research/ e os gates antes das tarefas. Orquestre transições automáticas com anúncio, execução e retomada na mesma conversa.

Replace the path, for example specs/draft/0001-convite-de-membros-por-e-mail/spec.md.

What the agent does

  1. Confirms the format (Formato: Specsfy/2.0), the three acts in order, the slug equal to the directory, and that the package holds only spec.md and an optional research/.
  2. Runs the structural validator of the skill:
    node fireskills/skills/fireskill-04-validate/scripts/validate_spec.mjs specs/draft/<NNNN>-<slug>/spec.md --allow-draft
    
  3. Does a semantic review: compares research, requirements, BDD, technical plan, data model, contracts, TDD, matrix and tasks. It confirms at least three distinct AC for the feature and for each US, FR and NFR. For a screen it requires section 10 to be complete; a CRUD without screens and forms is a BLOCKER.
  4. If the definition changes stack or persistence, it requires the Definition of Done to cite .fireskills/STACK.md or .fireskills/DATABASE.md.
  5. Returns exactly one result:
    ResultMeaningWhat happens
    READYno structural failure and no unresolved BLOCKERDefinition Gate: Passed, Status: Defined, then bun run fireskill transition <id> defined, then hand-off to $fireskill-05-tasks
    NOT READYa structural failure or a BLOCKERDefinition Gate: Failed, Status: Draft; goes back to $fireskill-02-backlog if a decision is missing, or to $fireskill-03-specify/$fireskill-update-spec if the fix is already decided

The same skill also closes the delivery at the end of the flow: in specs/review/, with the Delivery Gate passed, it moves the spec to completed. See Step 7.

Two validators, two jobs

CommandWhat it isChecks
validate_spec.mjs (the skill)The gate. Used by $fireskill-04-validate.Format, acts and sections, IDs, coverage of at least three AC per requirement, interface contract, research index
bun run fireskill validate <id> [--strict] (the CLI)A quick linter you can run yourself.Effort between 1 and 10, Effort rationale, Status; five sections found by heading (context/problem, actors/requirements/scope, BDD scenarios, tasks, tests/evidence); a BDD scenario; a task list. Placeholders such as [TODO] are warnings; --strict turns warnings into errors.

The CLI linter does not count AC, does not check the interface contract, does not change the gates and does not move the spec. Passing it is not the Definition Gate.

bun run fireskill validate 0001 --strict
Status: VALID (Passed spec linter)
Errors: 0 | Warnings: 0

transition does not check gates

bun run fireskill transition <id> <folder> moves the spec one step (draft ↔ defined ↔ planned ↔ in-progress ↔ review ↔ completed) and updates Status. It does not read the gates: a jump such as defined → in-progress is refused (invalid transition), but nothing stops you from moving a spec whose gate is Pending. Let the skills do the moves; they only do it after their gate has passed.

Optional: attack the spec first

For a high-effort or risky spec (Effort 7 or more), ask for an adversarial review before approving. See $fireskill-the-fool in Other entry points.

Next

READY → automatic: Step 5: Tasks.

Nuxfire Production Kit

Ready to build and launch your SaaS?

Get 100% full source code ownership, zero proprietary wrappers, and architecture engineered for millions of requests on Cloudflare.

© 2026 Nuxfire