Phase 7 · complete · the page that says what you found
A way to read the results that is not a command line
Every number in your Chapter 5 now exists as data a program can read. This phase turns that into a page. The useful part was not the building — it was that looking at the finished page showed four things wrong that no test could have caught, including the fact that it never actually said what you found.
What it shows
The page opens with your question and your answer, in that order, before any button or filter:
When an AI coding agent fails, can it fix its own mistake?
It fixed every formatting failure, and none of the reasoning failures.
Under it, the two numbers that are that answer — 3 of 3 and 0 of 4 — as two large cards, one in the ochre that means the paperwork was wrong and one in the blue that means the thinking was wrong, each with a sentence explaining what that distinction is. Below those sits the evidence: every attempt, filterable, with the full record of any one of them a click away.
That sentence is not typed into the page. It is built from the same committed file the numbers come from, and the strong wording is conditional on the data still saying so:
const all = fmtOf > 0 && fmt === fmtOf;
const none = log === 0;
answer = all && none
? "It fixed every formatting failure, and none of the reasoning failures."
: `It fixed ${fmt} of ${fmtOf} formatting failures and ${log} of ${logOf} reasoning failures.`;
If a later run recovers one reasoning failure, the page stops saying “none” on its own. Nobody has to remember to edit it. A claim and the number beside it cannot drift apart.
The four things the finished page got wrong
All four were found by looking at screenshots of it running. None of them was a bug — the arithmetic was correct in every case — and so no test would ever have reported them.
1. It never said what you found
The first version showed 3/3 and 0/4 under
four-word labels and nothing else. Someone who did not already know your
study could not have told you what it concluded. A dashboard that only
confirms what its author already knows is not doing anything.
2. It spoke in private vocabulary
Cell, lineage, arm, round, format-class, instrument limit, “not comparable to Chapter 5”. The leaf labels were in plain English; every structural word was not. Those terms now appear only with their definition attached, and the panel titles became questions — Does the edit format change the outcome?, How much moved on a task nobody solved?
3. A single bar claiming to be a comparison
The edit-format panel drew one bar and still printed “drawn to the largest group so the two bars are comparable”. There was only one format in the data. It now says there is nothing to compare yet, and names the run that would produce the other side.
4. The most important number was a footnote
The same panel showed 5 of 8 applied in large type and “23 set aside” in small grey. But those 23 were three-quarters of everything on screen — Gemini's free quota ran out partway through that run. The honest headline was never “63% succeeded”. It was most of this measured nothing at all.
That last one is the same mistake as the truncation problem from phase 6, showing up one layer later. Leaving those attempts out of the arithmetic was necessary — and it was not enough. The exclusion has to be as visible as the number it changes, or a reader just sees the good-looking fraction.
Colour that means something
Nine ways an attempt can end, and the colour carries two separate things at once. The hue says what kind of ending it was. How washed-out it is says whether it tells you anything about the model at all.
Three of the nine — our budget ran out, our token limit cut the answer off, the provider errored — are drawn in grey with diagonal hatching, because those attempts measured nothing about the model. They are our limits, not its failures. Painting a provider's rate-limit error in a failure colour would let it read as the model failing, which is exactly the misattribution the pipeline was built to prevent.
Colour is never the only signal: every square carries a fill, a letter and — for those three — a hatch. And the whole palette is checked by a script that fails the build if any pair is too faint to read, in both light and dark.
The checker that could not fail
That colour checker reported 82 checks passing and was lying. It had never checked light mode once.
It looks up a block of colour definitions by name. The name it was given included the opening brace, and then it searched for the opening brace after the end of that name — so it found the next block's brace instead, and read the dark-mode colours. Both themes pass, so running dark twice looked exactly like passing.
A test with a tiny hand-written fixture caught it: the light colour came back as the dark one. Behind it were five genuine light-mode failures, including two where the letter inside a coloured square was too faint against its own background.
This is the third time in this project that a declared safeguard turned out to have nothing behind it — a budget ceiling that was a string, a “thinking off” setting that was never sent, and now a colour checker testing one theme twice. A validator that cannot fail is worse than no validator, because it gets believed.
Why there is no charting library
Your own rules make the standard libraries the wrong tool. A zero has to draw no bar at all — the common libraries draw a one-pixel stub, which reads as “a little bit” when the truth is “none”, and that exact mistake had to be corrected once already in your figure 5.2. Every chart also needs a plain table version beside it, and the full scale has to stay visible as a dashed outline so a reader can see what the bar is a fraction of.
Across all six views the actual drawing comes to two rows of bars, one diagram and one grid. Writing those directly is less code than configuring a library to stop doing the things it does by default, and the page is about 110 KB lighter for it.
Where this leaves the project
Eight of nine phases done. Your results now exist three ways: as the submitted document, as committed data any program can check, and as a page that states the finding in a sentence and lets anyone dig to the individual attempt behind it.
Next is phase 8: the two recovery conditions your Chapter 6 names as future work and nobody has built yet.