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
- Confirms the format (
Formato: Specsfy/2.0), the three acts in order, the slug equal to the directory, and that the package holds onlyspec.mdand an optionalresearch/. - 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 - Does a semantic review: compares research, requirements, BDD, technical plan, data model, contracts, TDD, matrix and tasks. It confirms at least three distinct
ACfor the feature and for eachUS,FRandNFR. For a screen it requires section 10 to be complete; a CRUD without screens and forms is aBLOCKER. - If the definition changes stack or persistence, it requires the Definition of Done to cite
.fireskills/STACK.mdor.fireskills/DATABASE.md. - Returns exactly one result:
Result Meaning What happens READYno structural failure and no unresolved BLOCKERDefinition Gate: Passed,Status: Defined, thenbun run fireskill transition <id> defined, then hand-off to$fireskill-05-tasksNOT READYa structural failure or a BLOCKERDefinition Gate: Failed,Status: Draft; goes back to$fireskill-02-backlogif a decision is missing, or to$fireskill-03-specify/$fireskill-update-specif 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
| Command | What it is | Checks |
|---|---|---|
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.
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.