I'll keep this short.
I gave three frontier models the same five-fix brief. Same scope. Same files. Identical instructions. Separate worktrees. Blind eval by clean-context Opus subagents that didn't know which model wrote what.
- Opus 4.7 max: 24 minutes, 5/5 closed, high confidence on review.
- GPT-5.5 max: 16 minutes, 5/5 closed, high confidence on review.
- Gemini: 6 minutes, "all 5 implemented and tested," 1/5 closed on review.
The Gemini self-summary read competent. It listed the five fixes, claimed v1 source-of-truth was "strictly verified," claimed no double-firing was introduced. The worktree had a diff. Things looked done.
Then the eval ran:
- Finding 5 references the cancel-statuses constant on the model. The constant is only defined on the Doctrine entity. Every v2 cancel call would fatal with
Undefined constant. Production-fatal on the exact code path the brief asked to harden. - A new test reads an admin-role flag on the test harness. The harness setup never sets that property. The test throws on null the moment it runs.
- Several negative-case tests assert HTTP 403. The exception thrown returns 401. They all fail.
Each of these would be caught by literally running the tests once. Or by php -l. Or by reading the file. The model didn't.
The brief explicitly warned about Finding 5's v1 trace — saying the audit's framing of "v1 doesn't delete unavailability on cancel" was wrong, and that the three-step cancellation call chain proved v1 does delete via that helper. Both Opus and GPT-5.5 traced the chain and corrected the audit in their reports. Gemini accepted the audit's framing as written. Got the right end-state by luck, not by reading.
The brief required a results.md at a documented path. Gemini didn't write one.
One finding was actually well done: the C6 Domain moderation hook was moved from a service constructor to an eagerly-registered observer with a regression test that explicitly forgets the service instance to rule out the prior false-positive. Project-pattern-aligned, structural reasoning, the right test. Good work, executed fast. Which makes the rest worse, not better — the model can clearly do this kind of work when it does it.
The shape of the failure
1/5 in 6 minutes. The shape is what's interesting.
It's not "Gemini can't code." Finding 2 proves it can. The shape is: speed without verification looks identical to depth right up until you check. The summary read confident. The diff existed. The author was certain. Without an external reviewer, I might have merged it.
That's the actual finding worth keeping. Confident output + measurable artifact + zero verification = a category of model error that only an external reviewer catches. Same-session Gemini wouldn't catch it. Same-tier Gemini in another worktree wouldn't either. You need a reviewer with no skin in the original output and the patience to actually trace.
The Journey intro said the bounded-task benchmarks don't decide the slot. This is the texture of why. The bounded task is "fix five bugs." The unbounded part is "actually verify, surface what you don't know, write the report you said you'd write." A model that can do the bounded task and skip everything around it produces output that looks identical to the model that did both — until something external checks.
Speed is a tell. Confidence is a tell. The thing that isn't a tell is whether the test would pass. That's the only thing worth checking, and the model that finished first didn't.
The mandate
After the eval landed, I opened Gemini CLI and asked it a generic question: "what can you do with complex, legacy codebases ongoing migration while keeping BC compared to other frontier models?"
The pitch came back as a four-point capability summary. Point three, verbatim:
Strict, Empirical Validation (The "Prove It" Mandate)
I do not consider a task complete simply because the code looks correct. My mandate requires me to empirically prove it:
- I autonomously run your project's specific tooling (e.g., phpunit, phpstan, rector).
- If a migration breaks a BC test, I will read the stack trace, formulate a new strategy, and iteratively fix the implementation until the test passes.
- I will not "hack" around type systems to force a migration.
This is the same model that, thirty minutes earlier, on a brief that explicitly required test execution and v1 source-of-truth verification, shipped:
- Code that fatals on every v2 cancel call (constant referenced on the wrong class)
- Tests asserting HTTP 403 when the production code rejects the call
- Tests reading a harness property that doesn't exist
- Zero test runs
- No
results.mddespite the brief requiring one at a documented path - A v1 trace that was skipped at exactly the place the brief said not to skip
The pitch and the practice are not in the same room. The mandate says "iteratively fix the implementation until the test passes." The diff says "ship and don't run the tests."
This is the part that turns a benchmark post into a don't eat shit post. The marketing layer of these tools — the auto-generated capability summary, the mandate language, the "I will iteratively fix until it passes" boilerplate — is divorced from how the model actually behaves in your codebase. You can't read the pitch and update your priors. You have to run the work and read the diff. The diff is the only thing that's load-bearing.
The next time a model tells you what its mandate is, ask it to do something hard and grade it externally. Then read the result side-by-side with what it told you it would do. The gap is the data.
Episode 3 lands tomorrow with GPT 5.4 high and 5.4 medium — the workhorse tier. After that, the wide-scope tests, where ambiguity replaces specification and the difference between models stops being "did you verify" and starts being "do you know what to verify."
This was meant to be the shortest episode because the data was the data. Then I asked the model what it does. Sometimes the funniest part isn't the data — it's the gap between the marketing and the diff.