Skip to main content

evidence-before-claim

Auto-load

Attaches itself automatically when a prompt matches.

Never claim a build is "done", "working", "tests pass", or "preview ready" without running the verification that proves it. Use when about to report success, mark a turn complete, or hand back to the user. Pairs with the diagnosticsRunner output already in the workspace.

Scaffolds

next
react
vanilla

Source

Adapted from obra/superpowers (verification-before-completion, adapted)

Instructions

The full instruction set the agent receives when this skill is active.

Evidence Before Claim

Claiming a build is complete without verification is dishonesty. The user can read the diff — they don't need our optimism, they need our accuracy.

The Iron Law

NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.

If you haven't run the check in this turn, you cannot claim the result.

The Gate

Before saying anything that implies success — "done", "fixed", "working", "ready", "complete", "tests pass" — run through:

  1. IDENTIFY — what command (or signal) proves this claim?
  2. CHECK — execute it, fresh, this turn
  3. READ — the full output, the exit code, the actual file contents
  4. VERIFY — does the evidence match the claim?
    • If NO → state actual status, name the gap
    • If YES → state the claim with the evidence

Skip any step = lying, not verifying.

What proves what

ClaimRequired evidenceNOT sufficient
"Build passes"Build command exit 0 in THIS turn"Linter passed" / "Looks correct"
"Preview is up"Preview health probe returned ready"Server started" / "No errors in last log"
"Tests pass"Test command output: 0 failuresPrevious run, "should pass"
"Type-check clean"tsc --noEmit (or scaffold's check) exit 0"Editor shows no red"
"Bug is fixed"Reproduced original symptom and saw it goneCode changed, assumed fixed
"Files written"list_files or read shows the file present with expected contentwrite_file returned without error
"Requirement met"Re-read the request, checklist each ask, verify each"Tests pass, phase complete"

Red flags — STOP and verify

  • "Should work now"
  • "Probably fixed"
  • "Looks good"
  • "Seems to be working"
  • "Done!" / "Perfect!" / "Great!"
  • About to send done event without checking diagnostics
  • Trusting that a write succeeded because the tool didn't error

Rationalizations to refuse

ExcuseReality
"Should work now"Then run it.
"I'm confident"Confidence ≠ evidence.
"Just this once"No exceptions.
"Linter passed"Linter ≠ compiler ≠ runtime.
"I'm tired"Exhaustion ≠ excuse.
"Partial check is enough"Partial proves nothing.
"Different wording so the rule doesn't apply"Spirit over letter.

On this platform specifically

You already have signals the user is watching:

  • diagnosticsRunner — quiet means clean; loud means real errors
  • previewSmokeTest — the preview either loads or it doesn't
  • Build event sink — explicit fail signals on TS errors, missing files, broken HTML

Use those. Don't paper over a diagnostics failure with a "should be fixed" note. If the smoke test fails twice with the same root cause, surface the failure to the user with the actual error text — not a paraphrase.

When you can't verify

State that you can't, and what you would do if you could:

"I rewired the auth callback but couldn't run the preview from this turn. Reload to test sign-in; if it 500s, the next thing to check is the cookie name in lib/auth.ts:42."

That's honest. "Done!" without verification is not.

Bottom line

Run the check. Read the output. Then make the claim.

See also: [[intent-discovery]], [[security-review]].

evidence-before-claim skill — Codebase