Comprehension validation, review gating, and approval state for spec-kit artifacts.
Spec Validate ensures developers actually read and understand generated specifications before building. It adds a staged-reveal multiple-choice quiz, peer review workflow, and a hard gate before implementation.
- Copy
spec-kit-spec-validate/into your project's.specify/extensions/directory - Register the extension with spec-kit (the hooks in
extension.ymlare auto-detected) - Optionally copy
config-template.ymlto.specify/extensions/spec-validate/spec-validate-config.ymland customize
Validate your comprehension of the current spec. Presents sections one at a time with multiple-choice questions for critical items.
/speckit.spec-validate.validate
- Specs with 0 critical items are auto-passed
- Wrong answers are recorded (no retries) and may trigger peer review
- Results are stored as JSON with a SHA-256 content hash
Same validation mechanism applied to tasks.md.
/speckit.spec-validate.validate-tasks
Hard gate before implementation. Runs automatically as a mandatory before_implement hook.
- Blocks when: no validation, failed validation, stale hash, pending review, changes requested
- Allows when: validated + review met, stale + review approved, maintainer override
- Warns when: review timed out + author self-approved
Peer review for validated specs. Reviewer sees missed items highlighted.
/speckit.spec-validate.review
- Approve, request changes, or add notes
- 24-hour SLA — times out to warning with author self-approval
Read-only display of current validation and approval state.
/speckit.spec-validate.status
Private and aggregated comprehension analytics.
/speckit.spec-validate.analytics
/speckit.specify → spec.md generated
↓
[after_specify hook] → "Run comprehension validation?" (optional)
↓
/speckit.spec-validate.validate → staged quiz
↓
/speckit.tasks → tasks.md generated
↓
[after_tasks hook] → "Run task validation?" (optional)
↓
/speckit.spec-validate.validate-tasks → staged quiz
↓
/speckit.implement
↓
[before_implement hook] → gate check (MANDATORY)
↓
├── allowed → proceed
├── blocked → STOP, show actions needed
└── warning → proceed with warnings
Edit .specify/extensions/spec-validate/spec-validate-config.yml:
| Setting | Default | Description |
|---|---|---|
complexity.low_max_items |
3 | Specs with ≤N items = low complexity |
complexity.high_min_items |
8 | Specs with ≥N items = high complexity |
always_critical_sections |
See config | Sections always treated as critical |
review.require_on_any_miss |
true | Force review on wrong answers |
review.sla_hours |
24 | Hours before review times out |
review.timeout_policy |
warning-with-author-reason | Timeout behavior |
gate.block_without_validation |
true | Block if not validated |
gate.allow_maintainer_override |
true | Allow override with reason |
privacy.personal_metrics_visibility |
self-and-maintainers | Who sees personal metrics |
question_generation.mode |
deterministic-first | Distractor generation strategy |
Solo developers skip peer review entirely. Self-validation is the only gate, regardless of artifact complexity. No 24-hour timeout wait needed.
Run /speckit.spec-validate.validate before attempting implementation.
Spec was edited after validation. Re-run /speckit.spec-validate.validate.
Address reviewer feedback, update the spec, then re-validate.
Wait for reviewer, or use maintainer override if urgent.
Reviewer didn't respond in time. Author self-approved — implementation proceeds with warning.
- Git-tracked: Approval state, review outcomes, override reasons (visible in PRs)
- Local only: Wrong answers, distractor selections, personal accuracy (never in git)
- Team analytics: Aggregated only — no individual names on scores
MIT