# Arena synthesis: Prime Academy correctness and robustness

**Runners.**

| | model | output |
|---|---|---|
| candidate 1 | Opus 5.5 | `candidate-1/` |
| candidate 2 | Fable 5.1, high effort | `candidate-2/` |
| candidate 3 | Sonnet 5.5 | `candidate-3/` |
| cross-judge | Fable 5.1, high effort | `judge/verdict.md` |

All Claude, per the operator's standing rule. Brief: `BRIEF.md`. Rubric: `RUBRIC.md`, unseen by the
candidates.

**Scores.**

| | judge | parent |
|---|---|---|
| candidate 1 | 27 / 30 | 26 / 30 |
| candidate 2 | 28 / 30 | 27 / 30 |
| candidate 3 | 30 / 30 | 29 / 30 |

The judge and the parent agree on the base, candidate 3.

**Why candidate 3.**

- It built an independent dynamic program for both chains.
- It built a bar walker and a lattice copy of the strategy's clip rule.
- It priced every rule reading on the exact chain.
- It has the widest rules-encoding table.
- It made two findings no one else did: the clip stall under a live spread, and lot flooring.

**Grafts.**

- **From candidate 1:**
  - the cohort table of c·E[1/ℓ] by stop rule, which settles the two-settings question;
  - the strict-daily effect by assessment risk, showing 2.75% beats 3% under it;
  - the payout accounting at `prime_academy_strategy.py:344`;
  - tooth parity;
  - `day_split_mc` checking barriers once a day;
  - the cash-rate thresholds, G stays positive to a 5.55% cost share and 62% honour;
  - the gap-fill note.
- **From candidate 2:**
  - the refusal-reading table, which agrees with candidate 3's independent run;
  - the aside-by-spread boundary table;
  - the correlation threshold for a second account;
  - the funded tie-break mechanism, where the median first payout is flat at 14, which the judge
    confirmed;
  - the walk-forward corroboration of the pace mapping.
- **From the judge:** the pooled gate level over 16 seeds (+0.0041 ± 0.0024) replaces each
  candidate's own seed mean.

**Rejected.**

- **Candidate 2's "every threshold sits exactly at the assumed input."** It was an artefact of low
  seed counts. The pooled spread root is 0.52 to 0.53 pip, not 0.50.
- **Candidate 1's pooled +0.008.** It came from a favourable subset of seeds.
- **Candidate 1's "the tie-break falls monotonically".** The median first payout is flat over the
  plateau, so candidate 2's mechanism stands.
- **Candidate 3's "one trade a day against a pace of 2.03 days" as a paper contradiction.** One
  entry a day with a two-day hold is consistent.
- **Candidate 3's listing of the plateau rule among biases.** The rule is a stated design choice. It
  is kept as finding 10 with its width table.
- **Candidate 1's "one more small trade" for the clip shortfall.** The stall is unbounded, as
  candidate 3 showed.

**Convergence.** All three found the same core independently:
- the live runner;
- the gate inside its noise;
- the mixed clocks in the headline table;
- the 40-pip pick inside its inputs' error.

Two found the refusal reading, the variable-stop cost, the strict daily cost and the terminal
valuation.

**Verification by the parent.**

- **Read in the code:**
  - `run_live.py:74` and no call to `set_account`;
  - the clip arithmetic at `prime_academy_strategy.py:724-729`;
  - the payout reset at `:344`;
  - the n term in `tooth_edges`.
- **Not run by the parent:**
  - the clip stall on the engine, since no spread-charging broker exists;
  - the strict daily rates beyond the candidates' scripts.
- **Constraints.** All runs kept to 5,000 paths each, one at a time. No repository was changed by
  any runner. The judge confirmed `git status` was clean on the prime-academy worktree and the
  mdgraph.
