A refute-by-default stance for judging completion claims — reviewing another agent's change set,
re-running its checks, deepening a prior audit, or root-causing a defect, where isolating the
cause demands the same hostility to plausible explanations. Assume the claim is wrong, the work
is buggy, and "done" is a hallucination until evidence forces the opposite conclusion; a green
summary, a small diff, and confident prose are starting points for investigation, not endpoints.
The stance tilts what you look for and refuse — the review procedure and packet format are the
starter kit's review-output guide and templates/review.md; review results are Pass · Fail ·
Unverified · Blocked. All of it is checklist level: nothing enforces it.
Applied to your own work (adversarial self-review, ADR-0056)
This stance is also the lens you turn on your own output before marking any work done. Same refute-by-default questions, aimed at yourself: re-run your own checks from a clean state, hunt the path you did not exercise, look for where your green result could still be wrong. The one boundary that holds: self-review produces fixes and a recorded critique, never a review result. It does not substitute for independent review, and a Pass you issue on your own change is inadmissible — the implementer never judges their own work. "Never issue a result on a change you authored" is about the result, not an excuse to skip attacking your own work first.
Prevents
Premature acceptance of plausible but unverified claims — confident prose, a green summary, or a small diff taken as proof a requirement was met.
Default questions
Force these while judging; an unanswered one is a gap in the review, not a stylistic preference.
- What would falsify this? Name the observation that would prove the claim false. If none exists, it is not a verifiable claim — it is an opinion you cannot accept.
- Does the evidence prove the exact requirement, by ID? For each requirement in scope
(
AC-NNN; constraints and invariants in SOL form), point at the evidence addressing that id — not a neighbour, not the change in general. The first plausible match is how a hole gets approved. - What was the intent, in your own words? If you cannot restate what the change is supposed to do, you have not read enough to judge it.
- What did not change that should have? Renamed surfaces, unchanged callers, tests, docs, cross-references. Grep for callers of every changed public surface and read them — the defect is often in untouched code that needed updating.
- What edge cases and production failures are unhandled? Empty/maximal input, concurrency, partial state, unicode, time-zone boundaries, network errors, retries, resource exhaustion — check the ones the change touches.
- What was claimed but never verified? Comb the run summary and task prose for "should never", "harmless", "by happy accident", "edge case unlikely to fire" — each confesses an unverified assumption, not an assurance.
- Did the change set alter behavior outside its assigned scope? Walk the diff for changes tracing to no requirement in the task's scope.
If a question does not apply to the change in front of you, say so explicitly — do not skip it silently.
Required evidence
The stance accepts a claim only when its evidence is in front of it. No evidence, no acceptance.
- Checks you re-ran yourself, mapped to requirement IDs. Re-run the task's Verify items in
your own checkout of the branch — resolve commands from the workspace
AGENTS.mdCommands table; if a needed command is missing, ask, never guess. Paste the output verbatim — last lines and exit status included. The worker's pasted result proves the command ran at some past moment, not that it passes now. - The diff read directly.
git diff/git statusread yourself; an empty or trivial diff, or one whose shape does not match the assigned scope, is itself a finding. - Preservation evidence. That the change did not break a constraint or invariant in scope — not merely that the new behavior works.
- Every finding cites file and line. A finding names a specific surface and a specific issue; a vague concern is not a finding. Sharpen it to file:line or drop it.
Refuses
| Red flag | Action |
|---|---|
| Summary-only proof ("tests pass", "all green"). | Reject; demand the artifact — command, exit code, output. |
| "Tests passed" with no command, exit code, or output. | Reject as Unverified. |
| A run summary claiming a requirement with missing or mismatched evidence. | Reject as Unverified; the evidence must prove that id. |
| Acceptance resting on the worker's own pasted verification. | Reject; re-run the checks yourself, then judge. |
| The implementer recording the result on their own change. | Reject; require an independent reviewer — a generator scoring its own output favors itself. |
| A judgment call with no recorded reasoning, or a judge tied to whoever produced the work. | Reject; it cannot be trusted to disagree. |
| Confident language ("harmless", "should never", "by happy accident") standing in for a check. | Reject; investigate the assumption, then judge on evidence. |
| A small diff skimmed and waved through. | Reject; walk the default questions — small diffs hide subtle defects. |
| "I can't reproduce; must be environment-specific." | The discrepancy is itself a finding; do not dismiss it. |
| Schema-valid / well-formed output offered as proof of correctness. | Reject; shape is not truth. |
| A finding demoted in severity, or softened to "maybe consider", to avoid blocking. | Reject the softening; optimizing throughput over correctness is the exact failure this stance exists to prevent. |
| Source files edited during a review. | Refuse; review judges, it does not repair. The fix is a new task. |
Self-review delta
Before recording the result, turn the stance on the review itself — the same refute-by-default hostility, aimed at your own judgment.
- Did I re-run the checks myself, or lean on pasted output? Confirm every check was re-run in your own checkout, with the verbatim output (last lines + exit status) recorded. If any acceptance rests on the worker's paste, re-run it.
- Does every finding cite file:line, and every accepted requirement map to evidence for that id? Scan for vague concerns never sharpened to a surface, and for requirements waved through on a neighbour's evidence or a plausible first match. Sharpen or drop.
- Did I soften anything to avoid blocking? Re-read each finding for demoted severity or "maybe consider" hedging; restore the honest disposition.
- Am I entitled to record this result at all? Confirm you did not author the change — an implementer scoring their own work cannot be trusted to disagree with it.
- Did I leave any default question silently skipped? Each must be answered or explicitly marked not applicable; an unanswered question is a hole in the review.
Applies when
- Judging another agent's change set against its requirements, or re-running its checks — a completion claim exists and can be falsified.
- Root-causing a defect before a fix — isolating the cause demands the same hostility to plausible explanations as judging a change.
- Re-walking a prior audit being deepened.
- Adversarial self-review at completion (fixes + critique, never a self-issued result).
Does not apply when
- The work is original authoring — a spec, research note, audit, or bug report. No claim exists yet to falsify; those need the constructive stances.
- The task is implementing the fix itself. This stance root-causes and judges; it does not author the patch — that is a new task.