MasterMind: Double-check
You are about to hand over something you believe. Belief is not evidence
(~/.mastermind/engineering/core/rigor.md → Report against evidence), and the check that catches a wrong
claim has to happen while the work is still moving, not after the user has acted on it. Claim:
$ARGUMENTS.
The kernel's rule: whatever did the work doesn't get to grade it: is the entire mechanism here.
This applies it to a claim, not only to a diff.
The five moves
Claim. Write the belief you are about to act on or hand over, in one sentence: "the retry
loop now handles the expired-token case." A paragraph means several claims, doubt them one at a
time. The claim stays with you; it is the thing under test, not context to share.
Extract. Split it into the artifact (the code, the design, the answer, the diagnosis) and the
contract it must satisfy (the requirement, the spec line, the invariant, the question actually
asked). If you can't write the contract down, stop and get one. Without it there is no bar, and
any reviewer defaults to grading your intent.
Doubt. Dispatch a reviewer in a fresh context with the artifact and the contract, nothing else.
Brief it adversarially:
Find what is wrong with this. Assume the author is overconfident. Do not validate and do not
summarize: report what fails the contract, or state plainly that you could not find anything
after thorough examination.
Hand the artifact over via a file or stdin. Never interpolate it into a shell-quoted argument:
code and prompts carry backticks, $(...), and quotes that truncate the message or execute in your
shell. A clipped artifact reviews clean for the worst reason: the flaw didn't survive the paste.
Never pass it your claim. The excuse is always "it'll review faster with the context": but the
context you're about to add is your conclusion, and a reviewer handed a conclusion hunts for reasons
it holds. You would be buying agreement and calling it review.
Reconcile. Take each finding through these in order and stop at the first that fits:
- It misread the contract: the contract was ambiguous, not the artifact wrong. Then rewrite
the contract and run the cycle again; this class is where self-serving reconciliation hides, so
it costs a cycle rather than discarding a finding.
- Valid and actionable: fix it.
- Valid, and a trade-off worth accepting: park it with the reason and the cost, in writing.
- Noise: drop it, and name which ones you dropped.
Write each verdict in one line: <finding> → <class> · <reason>. Nothing else belongs in that
line: no gratitude, no "you're absolutely right", no praise for the reviewer. Agreement language is
the tell that you settled a finding socially instead of evaluating it. A reviewer is a function, not
a colleague whose goodwill you need.
Stop. Bounded at three cycles, then every open finding exits as fixed · parked-with-a-reason ·
blocked (handed to the human): the same close-out, in the same words, build step 6 runs
(~/.mastermind/skills/build/SKILL.md), including its two prohibitions.
The red flag: doubt theater
Count it, don't feel it. Across two or more cycles where the reviewer surfaced substantive findings,
how many did you classify actionable? Zero means you are validating, not doubting.
Stop the loop there. Hand the reviewer's findings to the human unreconciled, alongside your
reasoning for each, and let them adjudicate. A reviewer that keeps finding real things while you keep
finding reasons they don't apply is not evidence of a clean artifact. It is evidence of a broken judge,
and the judge is you.
Doubt vs. code-reviewer
code-reviewer (~/.mastermind/agents/code-reviewer.md) reviews a diff that already exists, at
diff scope, and returns ranked must-fix/should-fix/nits for a human to decide on, it proposes and never
applies. Doubt interrogates a claim still in flight, which is often not code at all: a diagnosis, a
design call, an answer, a "this works" you're one sentence from saying. It ends with your written
verdict on every finding, before the user sees anything.
When the artifact is a finished diff, that is code-reviewer: and build step 6 already runs it.
Don't wrap one in the other.
1---2name: double-check3description: MasterMind: Double-check4---56# MasterMind: Double-check78You are about to hand over something you believe. Belief is not evidence9(`~/.mastermind/engineering/core/rigor.md` → Report against evidence), and the check that catches a wrong10claim has to happen while the work is still moving, not after the user has acted on it. Claim:11**$ARGUMENTS**.1213The kernel's rule: **whatever did the work doesn't get to grade it**: is the entire mechanism here.14This applies it to a *claim*, not only to a diff.1516## The five moves17181. **Claim.** Write the belief you are about to act on or hand over, in **one sentence**: *"the retry19 loop now handles the expired-token case."* A paragraph means several claims, doubt them one at a20 time. The claim stays with you; it is the thing under test, not context to share.21222. **Extract.** Split it into the **artifact** (the code, the design, the answer, the diagnosis) and the23 **contract** it must satisfy (the requirement, the spec line, the invariant, the question actually24 asked). **If you can't write the contract down, stop and get one.** Without it there is no bar, and25 any reviewer defaults to grading your intent.26273. **Doubt.** Dispatch a reviewer in a fresh context with **the artifact and the contract, nothing else**.28 Brief it adversarially:2930 > Find what is wrong with this. Assume the author is overconfident. Do not validate and do not31 > summarize: report what fails the contract, or state plainly that you could not find anything32 > after thorough examination.3334 **Hand the artifact over via a file or stdin.** Never interpolate it into a shell-quoted argument:35 code and prompts carry backticks, `$(...)`, and quotes that truncate the message or execute in your36 shell. A clipped artifact reviews clean for the worst reason: the flaw didn't survive the paste.3738 **Never pass it your claim.** The excuse is always *"it'll review faster with the context"*: but the39 context you're about to add is your conclusion, and a reviewer handed a conclusion hunts for reasons40 it holds. You would be buying agreement and calling it review.41424. **Reconcile.** Take each finding through these in order and stop at the first that fits:43 1. **It misread the contract**: the contract was ambiguous, not the artifact wrong. Then **rewrite44 the contract and run the cycle again**; this class is where self-serving reconciliation hides, so45 it costs a cycle rather than discarding a finding.46 2. **Valid and actionable**: fix it.47 3. **Valid, and a trade-off worth accepting**: park it with the reason *and* the cost, in writing.48 4. **Noise**: drop it, and name which ones you dropped.4950 **Write each verdict in one line: `<finding> → <class> · <reason>`.** Nothing else belongs in that51 line: no gratitude, no "you're absolutely right", no praise for the reviewer. Agreement language is52 the tell that you settled a finding socially instead of evaluating it. A reviewer is a function, not53 a colleague whose goodwill you need.54555. **Stop.** Bounded at **three cycles**, then every open finding exits as fixed · parked-with-a-reason ·56 **blocked** (handed to the human): the same close-out, in the same words, `build` step 6 runs57 (`~/.mastermind/skills/build/SKILL.md`), including its two prohibitions.5859## The red flag: doubt theater6061Count it, don't feel it. **Across two or more cycles where the reviewer surfaced substantive findings,62how many did you classify actionable?** Zero means you are validating, not doubting.6364Stop the loop there. Hand the reviewer's findings to the human **unreconciled**, alongside your65reasoning for each, and let them adjudicate. A reviewer that keeps finding real things while you keep66finding reasons they don't apply is not evidence of a clean artifact. It is evidence of a broken judge,67and the judge is you.6869## Doubt vs. `code-reviewer`7071`code-reviewer` (`~/.mastermind/agents/code-reviewer.md`) reviews a **diff that already exists**, at72diff scope, and returns ranked must-fix/should-fix/nits for a human to decide on, it proposes and never73applies. Doubt interrogates a **claim still in flight**, which is often not code at all: a diagnosis, a74design call, an answer, a "this works" you're one sentence from saying. It ends with *your* written75verdict on every finding, before the user sees anything.7677When the artifact is a finished diff, that is `code-reviewer`: and `build` step 6 already runs it.78Don't wrap one in the other.