From sdd-pipeline
Verifies spec.md acceptance criteria coverage by green tests before PR. Maps ACs to tests, runs suite, reports gaps, auto-iterates with tdd to fix blocking issues.
npx claudepluginhub eduwxyz/my-awesome-skills --plugin sdd-pipelineThis skill uses the workspace's default tool permissions.
The closing gate of the SDD pipeline. Map every acceptance criterion in the spec to a green test, surface any gaps, decide whether the work is ready for review.
Verifies implementation completion by running tests, code hygiene review, spec compliance validation, and drift checks; blocks claims on failures. Use before commits or merges.
Executes complete TDD cycle—RED (failing tests from spec), GREEN (minimal implementation), REFACTOR (code quality), VERIFY (quality gates)—coordinating sub-agents for feature development.
Verifies implementation matches design spec for functional completeness, TDD compliance, and test coverage. Triggers on /review stage 1 before quality review.
Share bugs, ideas, or general feedback.
The closing gate of the SDD pipeline. Map every acceptance criterion in the spec to a green test, surface any gaps, decide whether the work is ready for review.
## Acceptance criteria section — the upstream skill (interview-to-spec or diagnose) was abandoned mid-way. Finish that first.Identify the spec. A path or slug for an existing spec/<slug>.md. If neither was provided, ask the user — do not guess.
Validate it. The spec must contain ## Acceptance criteria. If missing, abort and tell the user to complete the spec first.
Read the spec. Focus on Acceptance criteria and Edge cases (or Related risks for bug specs).
Find the tests. Locate the relevant test files in the project's test directory (tests/, __tests__/, *_test.go, *_spec.rb, etc). Read them.
Map AC → test. For each acceptance criterion, find the test that observably proves it. Match on behaviour, not on naming similarity. A test named close to an AC does not count if it asserts something different.
Find gaps. Two categories — handled differently:
Blocking gaps (auto-fixed via handoff to tdd):
skip / xfail / it.skip / @pytest.mark.skip / t.Skip / equivalent.TODO, commented-out assertions, or empty body.Warnings (surface only, do not auto-fix):
Confirm green. Run the project's test command (from .claude/tdd/test-command.txt if it exists, otherwise infer it the same way the tdd skill does). All tests must pass.
Report and persist the verdict. Use the format below, and write the one-word verdict to .claude/verify/last-verdict.txt (see Persisting the verdict).
## Verify report — <slug>
### Acceptance criteria coverage
- ✅ AC1 — `tests/auth/test_token.py::test_expired_tokens_rejected`
- ✅ AC2 — `tests/auth/test_token.py::test_valid_tokens_accepted`
- ❌ AC3 — no test found
### Edge cases
- ✅ Empty input — `tests/auth/test_token.py::test_empty_token_returns_400`
- ❌ Concurrent refresh — no test
### Tests without spec mapping (warning — your call)
- ⚠️ `tests/auth/test_token.py::test_token_internal_repr` — does not map to any AC. Intentional extra coverage, or scope-creep test to delete?
### Test run
✅ 47 passed, 0 failed, 0 skipped.
### Verdict
**Not ready.** 2 items lack coverage. See gaps above.
When all blocking gaps are absent and the suite is green, the verdict is Ready for review. Tests-without-mapping warnings do not affect the verdict.
Every run of verify ends by writing the one-word verdict to .claude/verify/last-verdict.txt (create the directory if missing). The file is a single line, no trailing newline:
Ready — all blocking gaps resolved and the suite is green.Not ready — at least one blocking gap remains.The Stop hook reads this file. If you forget to write it, the previous run's verdict persists; if you never write it, the hook never blocks. Always overwrite at the end of every run.
review (built-in) or proceed to PR.tdd with the gap list as the new test queue. After tdd is green, re-invoke verify. Repeat until the verdict is Ready.The Stop hook forces this iteration: while the verdict file says Not ready, the turn cannot end. Do not try to skip the loop — fix the gaps via tdd, re-verify, repeat.
Do not try to fix gaps inside verify itself — that's tdd's job. Verify only inspects, iterates, and reports.