Two AI reviewers, by the numbers

Every pull request in the lab gets reviewed by two Claude models before it can merge. Seven weeks of that, counted. Snapshot as of 25 October 2026.

Nine rounds with a machine reviewer is what one review loop feels like from the inside. This is the aggregate.

The setup

Agents write the code. Two reviewer accounts read every change, each driven by a configured model, and either one can withhold approval. A finding is rated HIGH, MEDIUM or LOW. A HIGH is meant to block the merge; MEDIUMs and LOWs are filed as follow-up issues and the change ships. For most of this period the two reviewers were Claude Fable 5.1 and Claude Opus 5.5.

Does the loop work?

Of the 206 pull requests that drew a HIGH:

On the pull requests that went three rounds or more, a HIGH was present in 93% of first rounds, 100% of second rounds and 29% of third rounds. MEDIUMs held steady at about 2.7 a round, which is expected: they never block, and each round reviews the fix as new code.

The two models

Fable 5.1Opus 5.5
Reviews1,402848
Reviews with a HIGH12.9%18.9%
Approved on the first round90.2%88.3%
Median time per review5.2 min1.9 min
Median tokens read per review664k359k
Mean cost per review, list price$2.53$0.64
HIGHs that were rule findings, not bugs10%30%

Costs are list-price equivalents computed from each review's own token counts. The reviews actually ran on a subscription, so the real cost is quota.

Same change, two opinions

On the 678 commits both models reviewed, Fable raised a HIGH on 78 and Opus on 116. They agreed on 57.

That looks like a clear win for Opus. It mostly isn't. I took all 80 commits where only one model raised a HIGH and had a third model, one that was neither reviewer, compare each HIGH against everything the other reviewer said about the same commit. Then I checked the survivors against the code.

Only Opus rated it HIGHOnly Fable rated it HIGH
HIGHs6221
Other model reported the same defect, at lower severity3611
Other model reported a related, narrower issue120
Other model did not mention it1410
…of which, real defects confirmed in the code107
A separate cut, across all of them
Rule or documentation findings, not defects17 of 625 of 21

Most of the gap is calibration: Opus calls HIGH on things Fable reports as a MEDIUM, and it enforces process rules, like citing where a cross-repository call comes from, much more strictly. What remains is close. Opus found 10 real defects Fable never mentioned; Fable found 7 that Opus never mentioned. None of the 17 reached the main branch: each was fixed before merge, or its pull request was closed and the work re-landed without it. The two real bugs that did reach main, in the audit above, are not among the 17. One merged before Opus was reviewing, so only one model ever saw it. For the other, the second model reported the same defect at lower severity. In both cases one reviewer rated it HIGH and the merge went ahead anyway.

Some of them, described by what they would have done:

A third opinion, after the fact

On 21 October one repository moved its second reviewer to a Sonnet model. In the four days after that, 36 changes merged with Sonnet and Opus both approving. On 28 October I had Fable review each of those exact commits, once and blind. It got the same prompt and tools as a live review, saw no later history, and posted nothing.

On 23 October nine test files had to be deleted from the main branch because they failed on every run and kept the build red. All nine came in through these 36 changes, and both reviewers had approved every one.

Fable would have blocked five of the nine. It withheld approval on only five of the 36 changes, and those five are exactly them. On the other four it named the cause of the failure but rated it below HIGH, so those merges would have gone ahead.

One caveat: the deletion proves the nine files failed. It doesn't prove each one failed for the reason Fable gave, and I checked that reason in the code for only some of them.

What I take from it

Method and limits

Data. Every review posted on the lab's forge in the period, with severities taken from each review's machine-readable findings block and the model from its provenance line. A finding withdrawn when the same reviewer re-reviewed the same commit stops counting.

Judging. The matching was done by a Sonnet model, which was neither reviewer, reading the review text. Only the findings it judged unique, defect-shaped and deserving HIGH were checked against the code, so 10 and 7 are lower bounds.

Not measured, mostly. Defects that neither reviewer caught. Replaying a third model, as above, finds only what that model would have caught. Finding the rest needs incidents traced back to the change that caused them, and the lab doesn't record that yet.

A late change. On 21 October one repository moved its second code reviewer to a Sonnet model, the same family that writes the code. Its 58 reviews are in the totals above but not in the two-model tables. The replay above is the only measure of that pairing so far.


The review loop itself: Nine rounds with a machine reviewer. The machinery around it: Plan dispatch, drawn.