Spec Lifecycle#
Every feature lives under:
specs/<feature-name>/
The canonical state lives in spec.json.
Main Artifacts#
specs/<feature-name>/
├── spec.json
├── requirements.md
├── research.md
├── design.md
└── tasks/
└── task-R*.md
Lifecycle#
- Create with
/hapo:specs - Refine requirements, research, design, and tasks
- Validate with
/hapo:specs --validate <feature> - Implement only when
ready_for_implementation = true
Important Fields In spec.json#
statuscurrent_phasevalidation.statustask_filestask_registryready_for_implementation
Validation Gate#
Validation should ensure:
- requirements match design
- design matches tasks
- tasks have completion criteria
- tasks have verification and evidence
- named contracts are explicit
If those are not aligned, implementation should stop.
Best Practice#
Do not treat the spec as disposable planning notes. In CafeKit, the spec is the runtime contract that hapo:develop, hapo:test, and hapo:sync all rely on.