Spec-driven development on OpenSpec, with mechanical spec-as-source enforcement: a custom 'spec-as-source' OpenSpec schema adds file-ownership (targets) and test-verification ([@test]) metadata to every capability spec, three scripts (link check, ownership check, manifest build) keep code and specs from drifting apart, plus requirement-gathering, spec-writer, work-review, and a session-handoff skill with a proactive context-warning hook.
71
89%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Take the approved spec, compare it point-by-point against the code you wrote, and confirm nothing was forgotten — before saying the work is finished. Complements spec-verify (which runs the mechanical checks): this skill is the line-by-line human-readable review that produces evidence (file:line), not just pass/fail.
Find the relevant specs. Identify every capability spec whose targets: match the files changed in this task:
git diff --name-only HEAD~1
grep -rl "targets:" openspec/specs/*/spec.mdCheck each requirement. Walk through every ### Requirement: block in each relevant spec. For each one:
src/auth.py:42).**Verified by**: [@test] <path> line points to a test that actually exercises this requirement (not just a file that happens to exist).Run the linked tests and record results:
grep -rhoE '\[@test\] [^ ]+' openspec/specs/*/spec.md | sed 's/\[@test\] //'If any test fails, the review cannot pass — diagnose before continuing (this duplicates part of spec-verify Step 1/4 on purpose: a review with stale results is worse than no review).
Capture every discovered requirement. Compare the implementation against the spec and identify every behavioral difference — not just missing pieces, but also things the code does that the spec never asked for:
For each discovered requirement: hand it to spec-writer to add it to the relevant spec (as ### Requirement: + **Verified by**), and link any test that already covers it or flag the gap if none does.
Update spec metadata if structure changed. If the implementation moved, renamed, or added files: update targets: in the owning spec(s), and update any [@test] paths affected by test file moves.
Produce the review summary:
## Work Review: <capability>
### Requirements
- [x] <requirement name> — implemented in src/foo.py:42
- [x] <requirement name> — implemented in src/bar.py:18
- [ ] <requirement name> — MISSING: no error handling for empty input
### Discovered requirements
- Added: timeout handling for API calls (not in original spec)
### Test results
- Linked tests: 5 passed, 0 failed
### Spec updates
- Added timeout requirement to openspec/specs/<capability>/spec.md
- Updated targets to include src/baz.pyThe review passes only when:
file:line reference,spec-writer),If any of these is unmet, the work is not done — say so explicitly, do not soften it into "mostly done" or "should be fine."
.tessl-plugin
skills
handoff
openspec-apply-change
openspec-archive-change
openspec-explore
openspec-propose
openspec-sync-specs
requirement-gathering
spec-as-source-setup
templates
openspec-schema
spec-as-source
templates
spec-ci-sync
spec-rebuild
spec-verify
spec-writer
work-review