| name | verification-before-completion |
| description | Use before claiming work is complete, fixed, or passing — before committing, opening a PR, or handing off. Requires running the verification command in THIS turn and reading its output before any success claim. |
Verification Before Completion
Claiming work done without fresh verification is dishonesty, not efficiency. adversarial-verify is the what; this skill is the when — the gate you pass through right before any completion claim.
The Iron Law
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
If you have not run the verification command in this message, you cannot claim it passes. Not "should", not "probably", not "based on the diff".
The gate function
Before writing "done" / "fixed" / "green" / "ready to merge" — even in your own head:
- Identify — what exact command proves this claim?
- Run — execute it fresh, complete, in this turn.
- Read — full output, check exit code, count failures.
- Verify — does the output actually confirm the claim?
- Only then — make the claim, with the evidence attached.
Skip any step = you are lying to the user, not verifying.
Common false claims → what they actually need
| Claim | Requires | Not sufficient |
|---|
| Tests pass | Fresh test run, exit 0, 0 failures | "should pass", previous run, "logic looks right" |
| Linter clean | Linter output, 0 errors | Partial check, extrapolating from unrelated files |
| Build succeeds | Build command, exit 0 | Linter passing, editor squiggles gone |
| Bug fixed | Reproduce original symptom, watch it not happen | Code changed, "assumed" fixed |
| Regression test works | Red → green cycle verified (revert fix, watch test fail, restore, watch pass) | Test passes once |
| Agent/subagent completed | Read the VCS diff, verify claimed changes exist | Agent's own "success" report |
| Spec satisfied | Line-by-line checklist against the plan | "Tests pass, phase complete" |
Red flags — you are about to claim without verifying
- Words like "should", "probably", "seems to", "looks good"
- Satisfaction language ("Great!", "Perfect!", "Done!") before running the command
- About to commit / push / open PR without a verification block in this turn
- Trusting a subagent's own success report
- "Just this once" thinking, or "I'm tired, close enough"
- Partial verification (linter passed, so build must)
Rationalization prevention
| Excuse | Reality |
|---|
| "Should work now" | RUN it. |
| "I'm confident" | Confidence ≠ evidence. |
| "Linter passed" | Linter ≠ compiler ≠ tests. |
| "The agent said success" | Read the diff yourself. |
| "Partial check is enough" | Partial proves nothing about the whole. |
| "Different words, so rule doesn't apply" | Spirit over letter. |
Patterns
Tests
- Run the test command. See
34/34 pass. Then say "all tests pass".
- Never: "should pass now".
Regression tests (real red-green)
- Write test → run (pass) → revert fix → run (MUST FAIL) → restore fix → run (pass).
- Never: "I've added a regression test" without the red-green cycle.
Build
- Run the build. See exit 0. Then say "build passes".
- Never: "linter passed, build should too".
Agent delegation
- Subagent reports success → check the VCS diff → verify the claimed change is actually there → report actual state.
- Never: paste the agent's report and treat it as truth.
When this fires
Always, before:
- Any variation of success / completion / fixed / passing / green
- Committing, opening a PR, marking a task done, handing off
- Moving to the next task
- Any positive statement about the work's state
Pair with
adversarial-verify — the 11 shortcuts agents take to fake "done"; run through the list, then run through this gate.
clean-commits — clean commits require verified content.
- The
verifier subagent — dispatch it; then verify its report against the diff (per the "Agent delegation" pattern above).
The bottom line
Run the command. Read the output. THEN claim the result. Non-negotiable.