/refute — Try to Break the Claim
The single highest-leverage quality procedure. Plausible-but-wrong is the default
failure mode of every model and every tired human. This skill converts skepticism
into a forced procedure. Repo-agnostic: works on any project, any language.
Invocation
/refute # refute the most recent completion claim in this session
/refute the pagination fix works # refute a specific claim
Procedure (all 5 steps, in order — no skipping)
State the claim precisely. One sentence, falsifiable. "The fix works" is not
a claim. "GET /players?page=2 returns rows 51–100 with HTTP 200" is.
Enumerate the ways it could be false. Minimum 3, each concrete:
- Wrong input class (empty, null, unicode, huge, negative, concurrent)
- Wrong environment (fresh clone, missing env var, prod-shaped data volume)
- Wrong layer (the symptom moved, the root cause didn't)
- Untested path (error branch, permission denied, timeout)
Pick the strongest refutation and RUN it. Actual command, actual output.
Not "this should handle it" — execute. If it can't be executed, say so
explicitly and downgrade the claim to UNVERIFIED.
Verdict, one of exactly three:
CONFIRMED — refutation attempted and failed; paste the command + output as evidence
REFUTED — found the break; the claim is false, say so plainly, fix or file
UNVERIFIED — could not execute a real test; the claim stays unproven and must
be reported as such (never silently upgraded to done)
Record. The verdict + evidence goes wherever the claim was going: commit
message (Evidence: line), PR body, issue comment. A claim without its verdict
attached did not happen.
Rules
- Default posture: the claim is false until step 3 fails to break it.
- The layer rule (done-claims). Refute a done-claim at the layer where it
is EXPERIENCED, not where it was produced. "Merged" proves the code layer;
"done" asserts the user layer — unpromoted branches, undeployed builds, and
unapplied migrations all manufacture false-dones that commit-level evidence
can't catch. Without observing the live artifact, the honest verdict is
CONFIRMED (code layer) / UNVERIFIED (live) — name both layers.
- One refutation run beats ten paragraphs of reasoning about why it's probably fine.
- If step 2 produces a refutation you can't afford to run (e.g. prod-only), that is
a finding: name the coverage gap in the verdict.
- Never soften REFUTED. "Mostly works" = REFUTED with details.
Worked example (real ruling, 2026-07-09 — reproduced as a static transcript)
Claim: "the judgment hooks work from a cold clone" (as first shipped).
- Falsifiable form: in a fresh sandbox with only shipped files, spec-citation
blocks a protected-path edit (exit 2) and passes an unprotected one (exit 0).
- Failure candidates: wrong env (cold clone), config not read, glob mismatch.
- Ran the sandbox matrix with a hand-written config → spec-citation FAILED to
block: exit 0 where 2 was expected. Before declaring REFUTED, refuted the
refuter: the test config used invented keys (
protected/spec_hint); the
shipped keys are protected_globs/specs_hint.
- Re-ran against the shipped
judgment.json.example → block=2, pass=0,
fire-once marker all green (hooks/judgment/test.sh).
CONFIRMED — evidence: sandbox matrix vs shipped example config, all green.
The first red was the harness's fault — which is the lesson: refute the
refutation's setup before trusting a red.
Composes with
/gate — a kill-gate threshold is a pre-agreed refutation.
/premortem — premortem failure modes are refutation candidates.
/altitude — after a cause-layer fix, refute the original SYMPTOM-layer claim to prove the fix propagated.
/drift — a drift sweep is batch refutation of a spec's claims against the code.
/verdict — REFUTED/SURVIVED outcomes worth remembering get logged there.
/sweep — a sweep's Phase 2 is /refute run adversarially at scale.
claim-evidence hook (hooks/judgment/claim-evidence.sh) — mechanically blocks
done-claims in commits that carry no evidence; /refute is how you produce it.
1---2name: refute3description: Adversarial claim verification. Before accepting any "it works / it's done / it's fixed" claim, construct the concrete input that would break it and run it. Use before commits, PR creation, closing issues, or whenever a completion claim is made.4---56# /refute — Try to Break the Claim78The single highest-leverage quality procedure. Plausible-but-wrong is the default9failure mode of every model and every tired human. This skill converts skepticism10into a forced procedure. Repo-agnostic: works on any project, any language.1112## Invocation1314```15/refute # refute the most recent completion claim in this session16/refute the pagination fix works # refute a specific claim17```1819## Procedure (all 5 steps, in order — no skipping)20211. **State the claim precisely.** One sentence, falsifiable. "The fix works" is not22 a claim. "GET /players?page=2 returns rows 51–100 with HTTP 200" is.23242. **Enumerate the ways it could be false.** Minimum 3, each concrete:25 - Wrong input class (empty, null, unicode, huge, negative, concurrent)26 - Wrong environment (fresh clone, missing env var, prod-shaped data volume)27 - Wrong layer (the symptom moved, the root cause didn't)28 - Untested path (error branch, permission denied, timeout)29303. **Pick the strongest refutation and RUN it.** Actual command, actual output.31 Not "this should handle it" — execute. If it can't be executed, say so32 explicitly and downgrade the claim to UNVERIFIED.33344. **Verdict, one of exactly three:**35 - `CONFIRMED` — refutation attempted and failed; paste the command + output as evidence36 - `REFUTED` — found the break; the claim is false, say so plainly, fix or file37 - `UNVERIFIED` — could not execute a real test; the claim stays unproven and must38 be reported as such (never silently upgraded to done)39405. **Record.** The verdict + evidence goes wherever the claim was going: commit41 message (`Evidence:` line), PR body, issue comment. A claim without its verdict42 attached did not happen.4344## Rules4546- Default posture: the claim is false until step 3 fails to break it.47- **The layer rule (done-claims).** Refute a done-claim at the layer where it48 is EXPERIENCED, not where it was produced. "Merged" proves the code layer;49 "done" asserts the user layer — unpromoted branches, undeployed builds, and50 unapplied migrations all manufacture false-dones that commit-level evidence51 can't catch. Without observing the live artifact, the honest verdict is52 `CONFIRMED (code layer) / UNVERIFIED (live)` — name both layers.53- One refutation run beats ten paragraphs of reasoning about why it's probably fine.54- If step 2 produces a refutation you can't afford to run (e.g. prod-only), that is55 a finding: name the coverage gap in the verdict.56- Never soften REFUTED. "Mostly works" = REFUTED with details.5758### Worked example (real ruling, 2026-07-09 — reproduced as a static transcript)5960**Claim:** "the judgment hooks work from a cold clone" (as first shipped).61621. Falsifiable form: in a fresh sandbox with only shipped files, spec-citation63 blocks a protected-path edit (exit 2) and passes an unprotected one (exit 0).642. Failure candidates: wrong env (cold clone), config not read, glob mismatch.653. Ran the sandbox matrix with a hand-written config → spec-citation FAILED to66 block: exit 0 where 2 was expected. Before declaring REFUTED, refuted the67 refuter: the test config used invented keys (`protected`/`spec_hint`); the68 shipped keys are `protected_globs`/`specs_hint`.694. Re-ran against the shipped `judgment.json.example` → block=2, pass=0,70 fire-once marker all green (`hooks/judgment/test.sh`).715. `CONFIRMED — evidence: sandbox matrix vs shipped example config, all green.`72 The first red was the harness's fault — which is the lesson: refute the73 refutation's setup before trusting a red.7475## Composes with7677- `/gate` — a kill-gate threshold is a pre-agreed refutation.78- `/premortem` — premortem failure modes are refutation candidates.79- `/altitude` — after a cause-layer fix, refute the original SYMPTOM-layer claim to prove the fix propagated.80- `/drift` — a drift sweep is batch refutation of a spec's claims against the code.81- `/verdict` — REFUTED/SURVIVED outcomes worth remembering get logged there.82- `/sweep` — a sweep's Phase 2 is /refute run adversarially at scale.83- `claim-evidence` hook (hooks/judgment/claim-evidence.sh) — mechanically blocks84 done-claims in commits that carry no evidence; /refute is how you produce it.