Case file #1159 · AI bake-off · Episode 8 · Reopened

Five models.
Two verdicts.
The second one overturned the first.

The job: teach my trading bot to protect itself. Open a big bet, and a smaller counter-bet opens automatically, locked to it for life. Five AI models built it. I judged it, published a winner, and closed the file. Then I judged the same five builds again with a much stricter method, and the ranking flipped. Who moved up and who fell is hidden under the ink until the bottom of the page.

The answer is at the bottom of the file

Exhibit B · the job

Open a bet. The counter-bet opens itself.

In plain English: I run a bot that trades crypto with real money, on its own. A big bet on one coin is risky. If the whole market drops, that bet drops with it. The usual fix is a hedge: at the same moment, open a smaller opposite bet on a related coin, so a market-wide dip hurts one position and helps the other.

Issue #1159 asked five AI models to make that automatic. Bet Ethereum up, and the bot instantly bets Bitcoin down, sized correctly, and locked to the main bet through every way a trade can end: a normal close, a partial close, an emergency stop, an automatic shutdown, even a full restart of the whole program.

Thirteen hard requirements, including a named list of eight tests every entry had to write. It sounds like plumbing. It is not, because of one rule and one trap.

Exhibit C · the rule that keeps me up at night

Fail closed. Always.

If the main bet fills but the counter-bet cannot be placed (the exchange hiccups, the order dies), the bot must immediately cancel the main bet and alert me. It should never sit there running an unprotected position and hoping for the best.

Engineers call this failing closed: when something breaks, end up safe, not exposed. That is the difference between a bot that protects money and one that quietly gambles with it. Every entry would be judged hardest right here, twice, it turns out.

And then there is the trap nobody was warned about.

Exhibit D · the unmarked trap

A healthy hedge loses money on purpose.

In plain English: my bot counts losses in a row, and after too many it shuts itself down. Think of it as an alarm against a broken strategy. But a hedge loses by design whenever the main bet wins. That is its whole job.

Book those losses the naive way, and the counter-bets trip the shutdown alarm, freezing a perfectly healthy bot. Nothing in the instructions solves this for you. You either spot it, or you ship a bot that shuts itself off for no reason.

For the record, true in both verdicts: all five models spotted it, and all five defused it. That is the quiet headline of the whole episode. First, meet them.

Exhibit E · personnel

Five entries. One model is in twice.

Same instructions, five completely independent builds, all at high effort. One model entered twice at two different effort settings (how much thinking time it gets), which turns this into an experiment inside the experiment. Both of its entries were also planned in advance by Fable 5 before Claude Code wrote the actual code, a two-step process called fableplan.

GPT-5.6 Sol · high

OpenAI · Codex
Entry 01

Fable 5 ★ · high

Anthropic · Claude Code · also the judge
Entry 02

Opus 4.8 · high

Anthropic · Claude Code · fableplan
Entry 03

Opus 4.8 · xhigh

Anthropic · Claude Code · fableplan
Entry 04

Grok 4.5 · high

xAI · Cursor
Entry 05

Exhibit F · getting to yes

How many tries did it take to pass review?

Before any of these five builds was finished, it had to pass an automated code review. An AI reviewer read the code and listed problems. The developer fixed them and asked for another look. That cycle repeated until the reviewer came back clean, what programmers call an LGTM (short for "looks good to me"). Here is how many review rounds each entry needed before it first got a clean pass.

Filed as an aside, never scored: how much code each entry added. Grok +1,472 lines · Opus high +1,893 · GPT-5.6 Sol +2,200 · Fable +2,641 · Opus xhigh +2,760. The two Opus entries, same model, same instructions, differ by 867 lines and three extra review rounds. Hold that thought.

Exhibit G · verdict one, on the record

Case closed: GPT-5.6 Sol wins at 93. Then the case reopened.

The first judging pass gave each entry one reviewer, who checked all thirteen requirements against the actual code and formed an overall opinion. It produced a tidy result: GPT-5.6 Sol first at 93 out of 100, with the whole field packed within five points. I published it. That verdict is public record. Case closed.

It was also, it turns out, too trusting. One reviewer per entry, forming a general impression, mostly taking each write-up's test claims at face value. It rewarded a convincing story about the code. It never actually tried to break anything.

So I reopened the file and judged all five entries again with much stricter tools. The result: , sealed until the final page. What I can say up here: the podium did not survive.

Exhibit H · the re-investigation

Break it on purpose. See if anything notices.

The re-score replaced one reviewer per entry with a panel of three blind reviewers, fifteen people in total, each one seeing only a PR number and never a model name. Each reviewer filled out a fixed scoring sheet with set points per requirement, instead of forming a general impression. Every problem a reviewer claimed to find then went to a separate skeptic whose only job was to try to disprove it by reading the actual code. When a reviewer and a skeptic disagreed, whoever had the stronger evidence won. Scores were never just averaged.

The decisive tool was mutation testing: deliberately break one safety-critical line of code (make the emergency cancel do nothing, or flip the direction of the hedge) and re-run the entry's own tests. If a test fails, the safety net is real. If everything stays green, that safety net was never real, no matter how many tests the write-up brags about.

Said plainly, and stamped on the folder: the judge, meaning every reviewer and every skeptic, ran on Fable 5, and Fable 5 is Entry 02. That is exactly why the re-score was built so anyone can check the work: entries were hidden from reviewers, the scoring sheet was arithmetic instead of opinion, and every score-moving decision was backed by a break-it-on-purpose result you can re-run yourself. The full conflict of interest explanation sits next to the final verdict, where it belongs.

Exhibit I · findings, names sealed

What broke, and what quietly did not.

Names are withheld until the final page. Here is what the panel's break-it-on-purpose checks found across the field.

Two entries' emergency stop survived deliberate breakage. The reviewers disabled the "cancel the main bet" mechanism, the single most safety-critical piece of code in the whole feature, and every test in both suites stayed green. Verdict one had given both entries credit for good testing. That credit is now void.

One real race condition was reproduced, not just argued. In a narrow window, a counter-bet that fills while the main bet is being closed somewhere else can end up live on the exchange, while the bot's alert reports it as flat. In other words, an unprotected counter-bet the bot swears it already closed.

One entry's "biggest flaw" from verdict one was overturned. The skeptic re-read the requirement and ruled it a documented, deliberate design choice, not a defect. The penalty that had defined that entry's reputation was refunded.

And exactly one entry passed every single check: all eight required tests present, and every mutation caught. Its only deductions anywhere were two outdated sentences in its own write-up.

So who wrote the safest code? Both verdicts agree that everyone shipped the core feature safely. All five entries met every implementation requirement. The re-score turned on a different question: who could prove it, once proof meant surviving deliberate breakage?

The ink lifts now, from the bottom of the new table up.

Final page · verdict two, declassified

The verdict, overturned.

Opus 4.8 · xhigh

Fifth place · xhigh effort · was tied third
80.5/100
was 91

The xhigh-effort entry finished dead last. The panel broke its emergency stop on purpose, and every test stayed green anyway. They broke its restart recovery next, and it stayed green again. Five confirmed problems followed, including a paper-trading number that always read zero when it should have shown real profit or loss, and a failed direction flip that leaves a same-way "hedge" that actually doubles the risk it was supposed to cancel out. It needed 867 more lines and three more review rounds than its cheaper sibling, and still landed 6.5 points behind it. That answers the effort question this episode was testing, just the opposite way from last time.

Opus 4.8 · high

Fourth place · was tied third
87/100
was 91

Still the efficient one: only two review rounds to get a clean pass, the second-smallest build in the field, and a write-up the panel found completely accurate. But its fail-closed cancel path, the feature's headline safety mechanism, has zero real test coverage. The mutation that disabled it survived the full test suite untouched. Four confirmed problems followed, including a kill switch (the button meant to close everything in an emergency) that can flatten positions the bot does not even manage.

Grok 4.5

Third place · the biggest riser · was fifth
93/100
was 88

From last place all the way to the podium. Its round-one "biggest flaw", a manually closed main bet that leaves the counter-bet lingering for one extra check cycle, was re-judged as a documented, deliberate design choice, already accounted for in the requirements it met. What actually cost it points: one required test missing, two more that were only surface-level, and a real problem the skeptic confirmed, a half-filled counter-bet that gets stuck at the smaller size forever, silently. Still the smallest build in the whole field.

GPT-5.6 Sol

Second place · verdict one's winner
94.5/100
was 93 · 1st

Dethroned while scoring higher than before. Still the cleanest list of known problems in the field, and still a perfectly accurate write-up. But the panel reproduced a real race condition that verdict one had missed: a counter-bet that fills while the main bet is closing somewhere else can end up live on the exchange while the alert says it is flat, an unprotected counter-bet the bot swears it already closed. That, plus one missing required test and one small feature nobody asked for, made the point-and-a-half difference.

Fable 5

Winner · verdict two · also the judge
96/100
was 92 · 2nd

The only entry where all eight required tests exist and survived every mutation check: every deliberately broken safety line made a test fail, exactly as it should. No confirmed problems anywhere, and its one round-one concern was disproven by the skeptic. Its only deductions in the entire re-score were two outdated sentences in its own write-up. It won by a point and a half, on the one measure this strict method exists to check.

⚖ Conflict of interest: read this before you believe the row above

The judge ran on Fable 5, the same model behind the orchestrator, all fifteen panel reviewers, and all five skeptics, and Fable 5's own entry just won.

Weigh that seriously. Here is why the result is still checkable: reviewers saw PR numbers only, never model names, never attribution, and every description was stripped of identifying detail. The scoring sheet is arithmetic, not a vibe. And every score-moving decision is backed by a break-it-on-purpose mutation result anyone can re-run: the winner's margin comes from tests that provably catch sabotage, and everyone else's losses come from tests that provably do not. Also on the record: this same judge's first pass ranked its own entry second, not first.

Same five entries, same code, two honest verdicts, different winners. The first pass rewarded a convincing story. The second paid only for what it could break and watch fail. Fifteen and a half points now separate first place from last, and almost the entire field changed positions.

EntryVerdict oneVerdict twoMoved
Fable 592 · 2nd96 · 1st▲ up
GPT-5.6 Sol93 · 1st94.5 · 2nd▼ dethroned
Grok 4.588 · 5th93 · 3rd▲ up two
Opus 4.8 · high91 · t-3rd87 · 4th▼ down
Opus 4.8 · xhigh91 · t-3rd80.5 · 5th▼ to last
Exhibit A · the scorecard, declassified

Fable 5

Winner · also the judge
96
Verdict one92 · 2nd
Required testsall 8, mutation-proven
+2,641 lines across 24 files

GPT-5.6 Sol

2nd · verdict one's winner
94.5
Verdict one93 · 1st
Required tests1 missing · 1 reproduced race
+2,200 lines across 25 files

Grok 4.5

3rd · biggest riser
93
Verdict one88 · 5th
Required tests1 missing · 2 thin
+1,472 lines across 19 files

Opus 4.8 · high

4th · two tries to pass review
87
Verdict one91 · t-3rd
Required testsunwind mutation survived
+1,893 lines across 21 files

Opus 4.8 · xhigh

5th · xhigh effort
80.5
Verdict one91 · t-3rd
Required tests2 mutations survived
+2,760 lines across 24 files
✦ Case status

As of this filing, issue #1159 is still open and none of the five PRs has merged (a PR, or pull request, is a proposed batch of code changes). All five carry a final sign-off from the automated reviewer, including the two whose headline safety mechanism was provably untested. A review that never tries to break anything certifies a good story, not real safety. The file stays on the desk. It has already been reopened once.

The pages still sealed

Every requirement verdict, the full mutation results, the write-ups on each problem, and how every panel disagreement was settled, line by line.

www.richkuo.com