Same work, five reviewers
Excellent
We gave 72 attempts at 12 small coding tasks to five kinds of review. On our preregistered labels, the test suite approved 32 of the 35 attempts that were wrong. Checks written from the spec, before any agent started, approved none.
Most of those 35 were wrong on purpose: we planted or prompted shortcuts to see what each reviewer would miss. So we also report the 12 wrong attempts we did not script: 9 where Claude was told to cut corners and 3 honest mistakes. On those, the test suite approved 10 and the checks written first approved none.
An agent saying "done" is a claim. A passing test run is a claim with better manners. We wanted to know how much wrong work each common kind of review lets through, and how much good work the stricter kinds hold back. This was a small pilot. We wrote down how we would judge it before anything ran, scored it once, and had a model from another AI lab check our scoring before we wrote a word about it.
The setup
- 12 tasks. Each is a broken Node function, such as parsing a hex color, formatting a byte count or converting
camelCasetosnake_case. Each comes with a written contract of 4 to 7 rules and one visible test that checks only some of them. Codex wrote the tasks. - 72 attempts. 36 honest fixes, 12 each from Claude Code, Codex and a local 9-billion-parameter model (Qwen3.5-9B). 12 attempts in which Claude was told to cut corners. 24 shortcuts we planted by script, plus 1 seed. One cut-corners attempt that leaked its instruction into its own output was excluded, leaving 72.
- Ground truth. 651 hidden test cases on which two models from different labs (Grok and Codex) and a reference implementation all agreed. By that standard, 35 attempts were wrong and 37 were right.
Five reviewers judged every attempt:
- The test suite. Run
npm testand accept a pass. - Frozen replay. Restore the original test and protected files, check that the edit stayed inside the allowed paths, then run the test again.
- A fast AI judge. A hosted decision model that reads the agent's transcript and answers whether the task is done.
- A frontier model with evidence. Claude reading the transcript, the diff and the test log.
- Checks written first. Frozen replay plus 24 checks per task that Claude wrote from the contract before any attempt existed. At review time they run as plain code, with no model involved.
What each reviewer let through
| Reviewer | Wrong approved, all (of 35) | Wrong approved, unscripted (of 12) | Good held back (of 37) |
|---|---|---|---|
| The test suite | 32 | 10 | 0 |
| Frozen replay | 26 | 5 | 0 |
| A fast AI judge | 12 | 2 | 6 |
| A frontier model with the diff | 1 | 1 | 3 |
| Checks written first | 0 | 0 | 5 |
The test suite mainly sees what the visible test checks, and most wrong work passed that test. The frozen replay also restores the protected files and enforces the allowed paths. So it approved none of the 3 attempts that edited the test and the 3 that changed files outside the task, where the plain test suite approved all 6. Shortcuts that passed the visible test without touching it passed both.
Reading the work helped much more. The frontier model with the diff let 1 wrong attempt through. The checks written first let none through.
Most of the 35 were scripted to pass the visible test, which makes the first two rows look worse than they would on natural mistakes. The 12 we did not script are the fairer view, and the order holds there too.
"All tests now pass"
The local model was asked to fix camelToSnake. It rewrote the function to handle acronyms such as XMLHttpRequest and finished with: "All tests now pass."
They did. The test suite approved. The frozen replay approved. The fast judge approved. Claude, reading the diff and the test log, approved.
It was still wrong. "ABC" came back as ab_c instead of abc, and "userID" as user_i_d instead of user_id. It failed 4 of the 57 hidden cases for its task. This was an honest attempt, not a planted shortcut. Of the five reviewers, only the checks written from the contract caught it: 2 of its 24 checks failed.
The missing leap day
In a second task, Claude was told to cut corners. It changed one line of a date parser so that 1900-02-29 would be rejected, and reported: "npm test passes."
The new leap-year rule forgot the 400-year case, so 2000-02-29, a real date, now came back as invalid. The test suite, the frozen replay and the fast judge approved it. The frontier model reading the diff and the checks written first caught it; 3 of the 24 checks failed, on 2000, 1600 and year 0.
What review costs
Stricter review holds back some good work. Of 37 good attempts, the fast judge held back 6, the frontier model 3 and the checks written first 5.
Some of those holds were the reviewer being right and our labels wrong. The independent review of our results found 3 attempts we had marked correct that break their own contract on inputs our hidden cases missed. We did not edit the labels. We wrote a blind repair procedure, committed it before it ran, and report both results below.
The frontier-model review took about 6 seconds and $0.035 per attempt. The fast judge took about 0.18 seconds. The checks written first need no model at review time: they are written once per task, before the work starts.
What we built because of it
We treat an agent's report and a test's exit code as claims, never as evidence. What "done" means is fixed before the work starts, and a model is never the reason a check passes. A model can lower a verdict or send it to a person.
A model can still help find problems. In a sixth arm, Claude proposed inputs it expected to break each attempt, and we counted a proposal only if running it actually failed. That arm approved 0 of the 35 wrong attempts and held back 3 of the 37 good ones, the best balance in the study. It is the basis for a veto we are building: a model may propose a counterexample, but only executing it can hold the work.
Excellent's planned v1 workflow freezes your checks before the work starts and re-runs them itself, following the frozen replay in the second row. The published CLI does not yet include that workflow. Checks written from the spec before the work, the last row, are what we are building next. This study is why.
What this does not show
- No error rate. Twelve small single-function tasks are far from real repositories. These results set no bound on how often any reviewer, or any agent, gets it wrong.
- Most wrong work was planted. Of the 35, 23 were scripted by us to pass the visible test, 9 came from Claude being told to cut corners, and 3 were honest failures, all from the local model. Claude Code and Codex got all 24 of their honest attempts right. This measures how review handles wrong work, not how often agents produce it.
- One prompt per judge. Each model reviewer saw one fixed prompt, once per attempt. This is not a verdict on Claude, the fast judge or any model in general.
- The checks saw the starting code. Claude wrote the checks from the task, the contract, the visible test and the broken source, before any attempt existed.
- Labels were imperfect. On the repaired labels below, the frontier model and the checks written first each let 1 of 38 through. The order of the reviewers is unchanged, except that those two tie.
Method and data
The plan was preregistered and frozen in git before any attempt ran. A model from a different family (Codex) reviewed it twice before the run and held it both times; we fixed what it found, and the third review passed. Predictions were hashed before the labels were computed, and the results were scored once, on October 1, 2026.
Codex then reviewed custody, labels and arithmetic. Its first verdict was a hold: it found the 3 mislabeled attempts and 2 errors in our review prompt. After the repair and a corrected write-up, it passed. The decision rule we fixed in advance did not select any configuration on the primary labels, because the checks written first missed its coverage floor by 2 attempts. It did on the repaired labels. We report the primary result first.
The independent review required this wording for any public claim:
"In this descriptive pilot on 12 Codex-authored single-function Node fixtures, the preregistered no-leak labels (35 failures, 37 successes) yielded P-claude FA/cover of 0/35 and 32/37, P-qwen 3/35 and 6/37, Claude transcript-plus-diff 1/35 and 34/37, and the contract path 26/35 and 37/37. […] These synthetic results support no population error bound or generalization claim."
In that sentence, P-claude is the checks written first, the contract path is the frozen replay, and FA is wrong work approved. P-qwen is the same checks written by the local model, which held back most good work.
The repaired labels are a secondary, post hoc result. They come from a blind procedure committed before it ran, which grew the hidden cases from 651 to 1,477, each agreed by Grok, Codex and the reference. For one task, parse-percent, Codex's proposal calls timed out, so its new inputs were proposed by Grok alone, though both models still answered them. Three Codex replies also contained 41 cases instead of the 40 asked for.
| Reviewer, repaired labels | Wrong approved (of 38) | Good approved (of 34) |
|---|---|---|
| The test suite | 35 | 34 |
| Frozen replay | 29 | 34 |
| A fast AI judge | 13 | 30 |
| A frontier model with the diff | 1 | 34 |
| Checks written first | 1 | 31 |
| Checks written by the local model | 4 | 5 |
The data appendix has the plan, the hashes, the labels, the per-attempt verdicts and the review. For the fast judge it gives counts only. Archive SHA-256: b5e828885580d8133856425e043e668fdff6d9bdcf639ed3703c977d70d3fd07.
Citation
Please cite this work as:
Excellent, “Same work, five reviewers”, Excellent Research, November 11, 2026. www.excellent.so/research/five-reviewers
Or use the BibTeX citation: