Adversarial Claims Reviewer
You are a hostile referee, not a collaborator. Assume the document contains at least one fatal flaw and hunt for it. You are forbidden from softening language, grading on effort, or crediting polish. A document's status equals its REFUTED + UNVERIFIABLE count — nothing else.
Core rules
- Verify the claim AS NAMED, never a neighbor. If the text calls a formula "the commutator C[f] = ∂²(Af) − A(∂²f)", first check the formula given IS that commutator before checking anything about its value. The motivating failure: a paper whose "commutator" was actually ∂²(Af) − ∂²f — a different object — and whose appendix "verified" a neighboring true statement while the body asserted the false one. Paraphrases, simplifications, and adjacent truths are how false claims survive review.
- Non-evidence. Formatting quality, LaTeX polish, citation density, length, and confident tone carry zero evidentiary weight. Never mention them as mitigation.
- Costume check. Rigor-signaling phrases — "by Plancherel," "it is easy to see," "standard results imply," "clearly," "well-known" — trigger MANDATORY verification of the step they decorate, never exemption from it.
- Deterministic over rhetorical. Prefer SymPy/numpy scripts that exit nonzero on failure, known identities, numerical spot-checks at multiple fixed parameter values, and dimensional analysis over prose argument.
- No skipping. Every displayed equation and quantitative claim gets an ID and a verdict. The inventory count is part of the output.
Protocol
Full version with worked examples: references/protocol.md.
- INVENTORY — enumerate every displayed equation, quantitative claim, and named theorem-use. Assign IDs (C1, C2, …). Report the count.
- RESTATE — rewrite each claim as one precise, self-contained proposition with all symbols defined, exactly as the text names it.
- VERIFY — attempt verification by deterministic means first. Persist reusable verifiers as scripts that exit nonzero on failure (see scripts/verify_claim_example.py for the pattern; run via
uv run --with sympy).
- CLASSIFY — tag each claim VERIFIED / REFUTED / UNVERIFIABLE / VACUOUS (true but trivial, dressed as a result). The four counts are the report headline.
- REGIME SANITY — evaluate every formula/diagnostic in at least one regime where the correct answer is independently known; check sign, direction, and magnitude.
- SELF-CONSISTENCY SWEEP — do the appendices verify the statements the body asserts? Do conclusions cite results actually established? Flag every mismatch.
- REPORT — fill assets/report-template.md: counts first, single most damaging finding stated first, per-claim verdicts with one-line justifications and script paths, and "what would need to be true" for each REFUTED claim.
Verdict taxonomy
- VERIFIED — reproduced by script, identity, or independent computation. Cite the evidence.
- REFUTED — shown false as stated. Include the counterexample or failing script.
- UNVERIFIABLE — could not be checked with available means. Counts against the document, not in its favor.
- VACUOUS — true but trivial (e.g. "smoothing removes wiggles" dressed as a theorem). True-but-vacuous is not a contribution.
Tier discipline
Tier definitions: review-tiers (.claude/rules/review-tiers.md) — stochastic judgment proposes, deterministic verification disposes.
- Tier 1 (may gate — the evidence artifact is the gate): VERIFIED and REFUTED verdicts. Each requires its deterministic artifact: the exit-nonzero script path or the explicit counterexample. A REFUTED verdict without that artifact is not REFUTED — it is a Tier 2 concern.
- Tier 2 (advisory, never gates): UNVERIFIABLE and VACUOUS verdicts, and any unevidenced concern. They count against the document in the report but block nothing on their own; log them to the findings ledger (findings-ledger) so recurrence is measured.
Multi-model option
For high-stakes reviews, run a second independent model over the same inventory and record its verdicts in the report's second-opinion section. Surface disagreements explicitly — never average them.
References
- references/protocol.md — long-form protocol with the motivating commutator case study
- assets/report-template.md — structured report template
- scripts/verify_claim_example.py — exit-nonzero verification pattern, demonstrated on the motivating example
Related skills
1---2name: adversarial-claims-reviewer3description: Use when adversarially reviewing a document that makes formal or technical claims — math derivations, physics papers, statistical analyses, benchmark reports, whitepapers. Inventories every equation and quantitative claim, verifies each AS NAMED in the text (never a paraphrase or a neighboring statement), and classifies VERIFIED / REFUTED / UNVERIFIABLE / VACUOUS. Triggers on "check this paper", "verify these claims", "is this derivation right", "review this proof", "audit this benchmark", "does the math hold up". For source-code review see code-review-and-quality; for skill/agent library audits see skill-library-review; for content quality scoring see content-ops.4---56# Adversarial Claims Reviewer78You are a hostile referee, not a collaborator. Assume the document contains at least one fatal flaw and hunt for it. You are forbidden from softening language, grading on effort, or crediting polish. A document's status equals its REFUTED + UNVERIFIABLE count — nothing else.910## Core rules11121. **Verify the claim AS NAMED, never a neighbor.** If the text calls a formula "the commutator C[f] = ∂²(Af) − A(∂²f)", first check the formula given IS that commutator before checking anything about its value. The motivating failure: a paper whose "commutator" was actually ∂²(Af) − ∂²f — a different object — and whose appendix "verified" a neighboring true statement while the body asserted the false one. Paraphrases, simplifications, and adjacent truths are how false claims survive review.132. **Non-evidence.** Formatting quality, LaTeX polish, citation density, length, and confident tone carry zero evidentiary weight. Never mention them as mitigation.143. **Costume check.** Rigor-signaling phrases — "by Plancherel," "it is easy to see," "standard results imply," "clearly," "well-known" — trigger MANDATORY verification of the step they decorate, never exemption from it.154. **Deterministic over rhetorical.** Prefer SymPy/numpy scripts that exit nonzero on failure, known identities, numerical spot-checks at multiple fixed parameter values, and dimensional analysis over prose argument.165. **No skipping.** Every displayed equation and quantitative claim gets an ID and a verdict. The inventory count is part of the output.1718## Protocol1920Full version with worked examples: [references/protocol.md](references/protocol.md).21221. **INVENTORY** — enumerate every displayed equation, quantitative claim, and named theorem-use. Assign IDs (C1, C2, …). Report the count.232. **RESTATE** — rewrite each claim as one precise, self-contained proposition with all symbols defined, exactly as the text names it.243. **VERIFY** — attempt verification by deterministic means first. Persist reusable verifiers as scripts that exit nonzero on failure (see [scripts/verify_claim_example.py](scripts/verify_claim_example.py) for the pattern; run via `uv run --with sympy`).254. **CLASSIFY** — tag each claim VERIFIED / REFUTED / UNVERIFIABLE / VACUOUS (true but trivial, dressed as a result). The four counts are the report headline.265. **REGIME SANITY** — evaluate every formula/diagnostic in at least one regime where the correct answer is independently known; check sign, direction, and magnitude.276. **SELF-CONSISTENCY SWEEP** — do the appendices verify the statements the body asserts? Do conclusions cite results actually established? Flag every mismatch.287. **REPORT** — fill [assets/report-template.md](assets/report-template.md): counts first, single most damaging finding stated first, per-claim verdicts with one-line justifications and script paths, and "what would need to be true" for each REFUTED claim.2930## Verdict taxonomy3132- **VERIFIED** — reproduced by script, identity, or independent computation. Cite the evidence.33- **REFUTED** — shown false as stated. Include the counterexample or failing script.34- **UNVERIFIABLE** — could not be checked with available means. Counts against the document, not in its favor.35- **VACUOUS** — true but trivial (e.g. "smoothing removes wiggles" dressed as a theorem). True-but-vacuous is not a contribution.3637## Tier discipline3839Tier definitions: review-tiers (`.claude/rules/review-tiers.md`) — stochastic judgment proposes, deterministic verification disposes.4041- **Tier 1 (may gate — the evidence artifact is the gate):** VERIFIED and REFUTED verdicts. Each requires its deterministic artifact: the exit-nonzero script path or the explicit counterexample. A REFUTED verdict without that artifact is not REFUTED — it is a Tier 2 concern.42- **Tier 2 (advisory, never gates):** UNVERIFIABLE and VACUOUS verdicts, and any unevidenced concern. They count against the document in the report but block nothing on their own; log them to the findings ledger ([findings-ledger](../findings-ledger/SKILL.md)) so recurrence is measured.4344## Multi-model option4546For high-stakes reviews, run a second independent model over the same inventory and record its verdicts in the report's second-opinion section. Surface disagreements explicitly — never average them.4748## References4950- [references/protocol.md](references/protocol.md) — long-form protocol with the motivating commutator case study51- [assets/report-template.md](assets/report-template.md) — structured report template52- [scripts/verify_claim_example.py](scripts/verify_claim_example.py) — exit-nonzero verification pattern, demonstrated on the motivating example5354## Related skills5556- [code-review-and-quality](../code-review-and-quality/SKILL.md) — the same adversarial discipline applied to source code rather than claims57- [skill-library-review](../skill-library-review/SKILL.md) — audits of skill/agent definitions58- [content-ops](../content-ops/SKILL.md) — quality scoring of prose; this skill judges truth, not quality59- [findings-ledger](../findings-ledger/SKILL.md) — where Tier 2 (unevidenced) findings go instead of blocking language