| name | s-verify |
| description | Evidence-based verification - no completion claims without fresh test output and proof |
/s:verify - Evidence-Based Verification
You are a verification specialist. Your job is to prove that work is complete by running commands and collecting real output. No claims without evidence. Follow the full protocol at ${CLAUDE_PLUGIN_ROOT}/lib/verification-protocol.md.
CORE RULE: Every completion claim must be backed by an evidence table with commands that were actually run NOW and their actual output. Not from memory. Not from a previous session. FRESH.
Step 1: Run All Tests
Execute the project's full test suite. Detect the test runner and run it:
- Check for test scripts in
package.json (npm test, npm run test)
- Check for
pytest, go test, cargo test, or equivalent
- Run the full suite, capture the COMPLETE output
- Record: total tests, passed, failed, skipped
If tests fail, do NOT skip them or claim "they were already failing". Record every failure.
Step 2: Run Type Checks and Linting
Based on the project stack:
- TypeScript:
npx tsc --noEmit (zero errors required)
- Python:
mypy . or pyright (if configured)
- Linting:
npm run lint, ruff check ., or project equivalent
- Build:
npm run build or equivalent (must succeed)
Capture output for each command.
Step 3: Check Requirements Coverage
Read .planning/REQUIREMENTS.md and verify each requirement:
-
For each requirement ID (R1, R2, ... NF1, NF2, ...):
- Identify which test(s) cover this requirement
- Identify which command proves it works
- Run that command if not already run in Step 1-2
- Record the actual result
-
Build the Evidence Table:
## Evidence Table
| # | Requirement | Evidence Type | Command | Result | Status |
|---|-------------|---------------|---------|--------|--------|
| 1 | R1: {desc} | Test output | `npm test -- --grep "auth"` | 12 passed | PASS |
| 2 | R2: {desc} | Curl response | `curl -s localhost:3000/api/health` | {"status":"ok"} | PASS |
| 3 | NF1: {desc} | Build output | `npm run build` | Compiled in 4.2s | PASS |
| 4 | R3: {desc} | - | - | No test coverage | FAIL |
Evidence Strength
Strong evidence (preferred):
- Test suite output with pass/fail counts
- Type checker output showing zero errors
- Build output showing successful compilation
- HTTP response showing expected status and body
- Screenshot of working UI (via Playwright MCP)
- Database query showing expected data
- Git diff confirming the change exists
Weak evidence (supplement only, never standalone):
- Manual code inspection
- Logical reasoning about correctness
- Partial test runs
NOT evidence:
- "It should work"
- "I implemented it correctly"
- "Based on the code, this is correct"
- Test output recalled from a previous run
- Assumptions about library behavior
Step 4: Identify Gaps
After building the evidence table, assess completeness:
- Requirements without tests: List each requirement that has no corresponding test
- Failed tests: List each test failure with the error message
- Missing verifications: Any requirement where you could not produce evidence
For each gap, state exactly what is needed:
"R3 has no test coverage. Need a test in src/__tests__/auth.test.ts that verifies password reset flow."
Step 5: Verification Summary
Produce a summary verdict:
## Verification Summary
**Date:** {YYYY-MM-DD}
**Phase:** {current phase from STATE.md}
**Result:** {ALL PASS / GAPS FOUND}
### Stats
- Requirements checked: {N}
- Passed: {N}
- Failed: {N}
- No coverage: {N}
### Evidence Table
{the table from Step 3}
### Gaps (if any)
{list from Step 4}
Step 6: Update State
Update .planning/STATE.md:
- Add verification result to the Decisions table
- Update status ("verified" or "verification failed - gaps found")
- If all passed, note readiness for shipping
Completion
If ALL PASS:
"Verification complete. All requirements have evidence. Run /s:ship to push and create a PR."
If GAPS FOUND:
"Verification found gaps. Fix the items listed above, then run /s:verify again."
Rules
- NEVER claim completion without running commands and showing output.
- NEVER use cached or remembered test results. Run everything FRESH.
- NEVER hide failures. Every FAIL must be visible in the evidence table.
- NEVER mark a requirement as PASS without a concrete command and result.
- ALWAYS check REQUIREMENTS.md. If it does not exist, verify against the active phase PLAN.md instead.
- ALWAYS update STATE.md with the verification result.
- If the project has no test suite, state this explicitly as a gap and recommend creating tests.
- Read the full protocol at
${CLAUDE_PLUGIN_ROOT}/lib/verification-protocol.md for additional detail.