PAI · Cross-Family Review · Empirical Report

Fixing Correlated Blindness in Code Reviews

Why an all-Claude pipeline stays blind to one class of bug, and how a cross-family panel fixes it. The cheapest reviewers catch the most dangerous ones.

Date: 2026-08-21 · Author: Robert Pohl · robert@belong.us

Executive Summary

A Claude author and a Claude reviewer share a training distribution, so they share blind spots. A whole class of bug passes both, because both miss it the same way. The cross-family panel routes every branch diff through model families with different training distributions. The bet is simple: a real defect rarely survives all of them at once.

Across 55 review runs and 371 findings, the ledger confirms the bet. It also exposes a structure nobody designed for:

55
panel review runs logged
371
total findings surfaced
44
critical (blocking) finds
7
model families on the bench
~10¢
market cost per default review
The headline finding: volume and severity decouple.

The model that finds the most issues is not the model that finds the most dangerous ones. GPT-5.6-Luna leads on raw volume (140 findings, 3.78/run). Gemini 3.6 Flash runs fewer times and surfaces double the criticals (14 vs 7) plus the most blocking verdicts (12). The two axes point at different models. You cannot collapse the panel into one reviewer, because no member wins on both.

Why it pays off

The payoff is concrete. Across these 55 runs the panel surfaced 44 critical, push-blocking defects: correctness bugs, spec-vs-code drift, and ledger-invariant violations. A same-family (Claude) reviewer waves that class through most often, because it shares the author's blind spots. The panel runs before every push as a second opinion and cites each project's own invariants by name. The economics are trivial. The default four-family panel costs about 10¢ per review at open-market token rates (see the rate card below). For a regulated money-path codebase, you get a rounding-error insurance policy against the one bug class an all-Claude pipeline stays blind to.

Note. Claude appears on none of these charts, deliberately. Claude is the orchestrator and author, not an independent checker. Measuring Claude here would grade the code's writer on its own work. The leaderboard tracks the independent witnesses only. More below on why Claude is left off the leaderboard.

Who finds what

Every run appends one record per reviewer: counts of critical, high, and medium findings. Ranked by total volume, the panel splits into a high-yield anchor (Luna), two always-on backends (Grok, Gemini), and an escalation bench (Kimi, Sol) that runs only on the hardest diffs.

Findings by model, stacked by severity
all 55 runs · n findings
0 35 70 105 140 total findings GPT-5.6-Luna 140 Grok 4.6 102 Gemini 3.6 Flash 76 Kimi K3 18 Nemotron-3 Ultra 15 GPT-5.6-Sol 7 DeepSeek V3.2 2
Read: Luna's bar is mostly high/medium volume. Gemini's bar is shorter, yet its critical segment is the widest of any model. The severity signal lives in a different reviewer than the volume signal. DeepSeek runs almost entirely in gate/JSON mode, where only a block is recorded (see the data-honesty notes below).

The decoupling

Plot each reviewer by the two things a review panel cares about: how many findings it raises per run (breadth) against how many of those are critical per run (depth). A single best model would sit in the top-right corner. None does. Breadth and depth pull apart.

Breadth vs. depth: findings/run against criticals/run
bubble area ∝ runs
0.6 0.4 0.2 0 0 1 2 3 4 findings per run (breadth →) criticals per run (depth →) Gemini Kimi Nemotron Sol Grok Luna DeepSeek ↑ depth leader breadth leader →
Read: a single best reviewer would sit top-right. Instead Gemini owns the top (depth) and Luna owns the right (breadth). The corner is empty. The panel's value is the union of these positions, not any one of them.

The cheapest reviewers carry the panel

Two of the seven families, Grok (xAI) and Gemini (Google), cost about $0.08 per review combined at market (see the rate card below). Together they raise the majority of the panel's criticals. They are not makeweights. They are the core of the panel. Split every finding by which backend raised it:

Share of output: Grok + Gemini vs the rest
percent of each pool
0% 50% 100% Critical finds 57% · 25 43% · 19 All findings 48% · 178 52% · 193 Reviewer-runs 49% · 70 51% · 72
Read: Grok + Gemini produce roughly half of everything and a clear majority, 57%, of the criticals, for about $0.08 a run at market. The two independent families that catch the worst bugs are the cheap part of the panel. Escalation to frontier models (Sol, Kimi) stays reserved for genuine architecture calls.

Full leaderboard

Model (family)RunsCritHighMedTotal/runBlk
GPT-5.6-Luna (OpenAI)37774591403.787
Grok 4.6 (xAI)431150411022.379
Gemini 3.6 Flash (Google)27143527762.8112
Kimi K3 (Moonshot)7369182.572
Nemotron-3 Ultra (NVIDIA)6258152.502
GPT-5.6-Sol (OpenAI)315172.331
DeepSeek V3.21620020.132

Blk = runs the model flagged as blocking (a critical). /run = total ÷ runs, the fair cross-model comparison, since each reviewer self-gates on backend availability and not every model runs on every review.

The reasoning behind the framework

Why route code past other model families at all? The argument is not "more reviewers is better." It is a first-principles claim about where blind spots come from.

Deconstruct: what a review is

A reviewer detects a defect only if that defect falls inside its visible set: the classes of bug its training distribution makes it sensitive to. Author and reviewer each carry a visible set. A bug is caught if it lands in the union of the visible sets pointed at it.

The irreducible truth: correlated failure

When author and reviewer share a training distribution (a Claude writing code, a Claude reviewing it), their visible sets are highly correlated, and so are their blind spots. A defect sitting in the shared blind spot passes both, every time, because both miss it the same way. A stronger single reviewer does not fix this. The problem is correlation, not quality. The same principle drives RAID arrays to mix disk batches and aviation to use dissimilar redundancy.

Challenge: "use a stronger model"

The tempting move is to replace the panel with one better reviewer. The data refutes this directly. The strongest single volume-catcher (Luna) finds half the criticals-per-run that Gemini does. Reviewer strength is not the binding constraint. Blind-spot correlation is. Two independent, weaker reviewers beat one strong reviewer whose blind spots you already share.

Reconstruct: the optimal panel

To maximize the union of visible sets under a cost budget, the design is clear. Maximize family diversity first (independent distributions). Add the expensive frontier families only where the extra defect-catch justifies the spend. Two genuinely independent families (Grok, Gemini) cost about 8¢ a run combined at market, so near-total distribution diversity costs almost nothing. That is the shape the cost split shows.

The click

The ledger's own numbers make the argument hard to vary. Breadth and depth live in different families, and the corner where a single best reviewer would sit is empty. You cannot compress the panel to one model without losing an axis. The panel is not redundancy. The panel is coverage. That is the whole framework in one sentence.

Why Claude is not on the leaderboard

Claude wrote the code and ran the first review. Claude also orchestrates this panel and adjudicates what comes back. Claude is the one intelligence in the loop that is not an independent witness, so these charts leave it off by design.

The framework exists to escape a single failure mode. An author and a reviewer that share a training distribution share their blind spots, so a class of bug passes both. Claude is the author. A Claude reviewer would then get graded on catching the very bugs it tends to miss. Its findings would not be independent evidence. They would be the same distribution voting twice. Counting them would inflate the panel's apparent coverage with correlated noise.

The division of labour is deliberate. Claude sits upstream. Claude authors the diff, runs the first-pass same-family review, loads the repo's invariants, spawns the panel, and adjudicates the union of findings. The cross-family panel is the independent second opinion. The leaderboard tracks the checkers, never the thing checked. This is also why you cannot build the panel from Claude sub-agents wearing other vendors' names. Independence has to be real, not costumed. The next section shows why.

The skill: definition & logic

The panel is a self-activating review skill: a defined contract plus one shell engine, run from inside any git repo. Intent triggers it: "cross-family review", "second opinion", "have another family look at this". The pre-push and pre-PR moment triggers it too. It runs after the same-family Claude review and complements it. It never replaces it.

The pipeline: five steps

  1. Resolve the diff. Merge-base of the branch against its base (origin/dev → origin/main → main, or an explicit base).
  2. Load the judgment layer. Auto-detect the repo's own handbook docs (architecture notes, invariants, contribution guide) and feed it in, so findings cite the project's rules by name rather than generic advice.
  3. Prompt adversarially. Every reviewer is told to assume there is a bug and to review the whole system: callers, cross-file contracts, and downstream behaviour, not only the diff hunk.
  4. Run the panel concurrently. Each backend call is independent I/O, so wall-clock equals the slowest single reviewer, not the sum. Findings still print in a fixed panel order, regardless of which returns first.
  5. Emit. Ranked findings per reviewer, or an aggregated {block, summary} verdict in --json mode. block=true if any reviewer flags a critical (union, not consensus).

What a reviewer costs: the market rate card

The price of the panel is the market rate: what each family charges per token on the open market. Live OpenRouter list prices, per 1M tokens (fetched 2026-08-21):

Reviewer (family)OpenRouter slugInput $/MOutput $/MMarket $/run
Grok 4.6 (xAI)x-ai/grok-4.62.006.000.068
Gemini 3.7 Flash (Google)google/gemini-3.7-flash0.381.880.015
GPT-5.6-Luna (OpenAI)openai/gpt-5.6-luna0.201.200.009
DeepSeek V3.2deepseek/deepseek-v3.20.270.400.008
GPT-5.6-Sol (OpenAI)openai/gpt-5.6-sol2.5015.000.108
Kimi K3 (Moonshot)moonshotai/kimi-k33.0015.000.120

Per-run cost assumes ~25K input + ~3K output tokens per reviewer: a full branch diff plus the repo's handbook in, a ranked findings list out. Frontier reasoning (Sol, Kimi) with a large thinking budget runs several× higher. Recompute from the rate card for your own diff size. The ledger records findings, not tokens, so treat this as a transparent estimate, not a metered bill.

Cost-optimized profiles

Market $/run is what the whole panel costs at list price for every reviewer.

ProfileRosterMarket $/runWhen
cheapgrok · gemini~$0.08near-zero smoke pass
standardgrok · luna · deepseek · gemini~$0.10routine second opinion (default)
deep+ sol~$0.21correctness-critical: ledger / auth / migrations
max+ sol · kimi~$0.33genuine architecture decisions only

At market rate the default panel costs ~10¢ a review, and the most expensive profile costs a third of a dollar. Against the cost of one ledger-invariant bug reaching production, the whole spend rounds to zero. Rosters maximize family diversity per dollar. --models grok,deepseek overrides a profile entirely.

Graceful degradation & scope discipline

Reviewer structure & logic

The single most consequential architectural decision: reviewers are CLI subprocesses, not Claude Agent sub-agents. This choice makes "cross-family" real instead of cosmetic.

A Claude Agent sub-agent, say a "GrokResearcher" persona, runs on the underlying Claude model. It describes xAI, but it is still Claude underneath: same weights, same training distribution, same blind spots. Dressing a sub-agent in another vendor's name buys zero independence. The only genuinely cross-family path is to shell out to the real binaries and let a different company's model read the diff.

How a review fans out
orchestrator → subprocess panel → ledger
Claude author · first review orchestrator · adjudicator branch diff vs base + repo invariants doc own-CLI · invoked directly codex → OpenRouter Grok · xAI Gemini · Google Luna · OpenAI DeepSeek Sol · OpenAI Kimi · Moonshot union of findings block? (any critical) → findings ledger
Read: the diff fans out to genuinely different models running as real processes. Their findings converge to a union verdict (a single critical from any reviewer blocks) and one ledger record. Claude sits at both ends of the flow and never inside the panel.

Two backend classes

Execution logic

Reading the data honestly

If you find these things interesting and would like to work with us at Belong, reach out. https://belong.us