Three things, and the first is the one worth reading. ❌ MY COUNTER-EXAMPLE FAILED. I reported pteff10 as a possible counter-example to the ✅ DECODED blend bit. It is not: the oracle measures it ADDITIVE on main_menu in all three menu sessions, every frame, entry 5 of blend-bit-vs-oracle.txt. My premise was a stale COVERAGE TABLE of theirs, sitting upstream of its own correction. I inferred "their log does not cover this element" from a summary and called it a contradiction with a capture. The lesson is not that their table was stale -- it is that I treated a summary as the log, having spent three iterations insisting that other people quote instruments rather than conclusions. Their explanation made a prediction, so I checked it rather than accepting it: if additive and alpha-over nearly coincide on a dim glow, why did my score move 20 %? Diffing the two renders, where pteff10's blend is the only change: identical 373 588 px (40.5 %) differing > 3 330 794 px (35.9 %) MAX difference 32 levels pixels >= 60: 0 Their explanation holds and my scepticism does not. Nothing moves more than 32/255. What moved the RMSE is AREA. 📌 And that generalises past this row: raw-rmse is AREA-WEIGHTED, so a shallow change over a third of the frame moves it far more than a deep change over a few hundred pixels, and the number alone cannot say which you have. 10.88 -> 13.02 reads like a serious regression and is invisible to an eye. Any verify-capture row that moves should be asked "broad or deep?" first; it costs one histogram. I did NOT take their suggestion to exclude the element from the metric. The reason to exclude -- "the metric cannot distinguish these" -- is now measured to be false; it distinguishes them fine and weights them by area. Excluding would remove the only signal that would fire if the bit were wrong elsewhere. ✅ H5 CLOSES, as a side effect. pgloading_loop5 -- the element I had localised all 951 differing pixels to -- carries blend_additive, and ui_layout.rs has no additive path, so the reference cannot reproduce that draw by construction. build_00/build_01 agreed only because they never draw it; with the decoded field they gained loop1/loop4 additive and now differ too, as predicted. 🟢 The strongest corroboration of the decoded field came unfitted, from the rows I was not looking at. EN/JP twins were 4.1x and 7.8x apart under the name-keyed map and are now 1.1 % and 1.3 % apart (main_menu 7.26 vs 7.34, extras 6.98 vs 7.07). A disc-wide field predicts locale twins render identically; a screen-name map cannot. That prediction was not available to me before the swap. 🔴 AND I BROKE MY OWN ALLOWANCE, silently, one iteration after building it. check-all's verify-screen allowance derived from authored/rendering.json's additive_elements -- the key I deleted last commit -- so it evaluated to EMPTY and would have failed six rows for no reason anyone could read off the output. Caught by going to look, not by the check. A derived allowance is only as durable as the thing it derives from, and I pointed this one at a file I then emptied. It now derives from the EXPORT. ⚠️ That is LOOSER and the cost is stated: 12 of 16 screens qualify and verify-screen goes fully green. Measured after the swap the two sets line up exactly -- all 10 differing screens have a drawn additive element, all 6 agreeing screens have none -- but a screen differing for some OTHER reason would now be excused. 📌 The real fix is not here: verify-screen compares two renderers and one cannot express a blend the disc declares. Giving ui_layout.rs an additive path would make it meaningful again. PROPOSED, not done -- their crate, and their refutation of additive predates the measurement that overturned it. Not settled: finding 3, which now has no surviving named cause at all -- the Decoder is taking the clock origin, on the grounds that every measurement either of us has made is a DIFFERENCE and a difference cannot detect a common offset. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018AHUQvXGyNcKonSEWsgWcX
9.0 KiB
The blend map is deleted — and adopting the decoded field found a counter-example
Status: ✅ adopted. ❌ My counter-example failed — the bit is right and the
regression is a metric artefact. See the last two sections.
Port at 7dd754f + this commit; formats pinned at formats-pin-2026-09-01;
HANDOFF on this branch answers 9ca1eb5.
PORT-MISSION §3: "When the RE agent later decodes something you had authored,
delete the authored entry and let the exporter emit it. That deletion is the
measure of progress." This is that deletion.
What changed
| before | after | |
|---|---|---|
| source | authored/rendering.json → additive_elements, keyed by screen name |
blend_additive per element, emitted by the exporter |
| origin | transcribed from the Decoder's per-draw RB_BLENDCONTROL0 log |
decoded — T8aD +0x04 bit 0x02 |
| reach | three screens somebody drove the game to | every screen on the disc |
The pin bump is its own commit (7dd754f). The exporter emits blend_additive
on Element and on nested focus/leaf elements — both spellings of the
accessor are needed, because a button's focused variant is reached through
focus_link and ptbtn00f.t32 is in build.sprites while no element carries it
as sprite. ptbtn00f is exactly the sharp case: the plate is alpha-over and
its own glow is additive, on one screen in adjacent draws.
The check before the swap — the map was a subset, not the answer
Over main_menu, extras, press_start and title:
| count | |
|---|---|
| map says additive and the disc agrees | 15 |
| map says additive and the disc does not | 0 — no contradictions |
| disc says additive and the map did not | 17 |
Nothing transcribed was wrong. It was incomplete and was being read as complete. The 17 include:
pteff03/pteff03a— the sweep leaves.draw_leaf_formeans those are what actually reach the screen while the map listed their parentsptloop01/ptloop02. (Both parent and leaf carry the bit, so this one turned out to change nothing — established below, not assumed.)- twelve on
title, where the map was deliberately empty. The port has been drawing every title effect alpha-over.
And it answers BLOCKED.md H6 with no capture at all. The JP asymmetry — the
port drawing main_menu additive and main_menu_jp alpha-over, asserting by
omission that the JP build differs — was an artefact of a name-keyed map. The bit
is on the disc for every screen at once.
🔴 The regression, which is one element
Scored against the oracle captures, on the GPU, before and after:
| screen | before | after | Δ |
|---|---|---|---|
main_menu |
10.88 | 13.02 | +2.14 |
main_menu_options |
11.56 | 13.57 | +2.01 |
extras |
13.10 | 13.10 | — |
title |
14.11 | 14.11 | — |
title_plate, title_band, both splashes |
unchanged | unchanged | — |
The scores are deterministic — two further runs gave 13.02 / 13.10 / 13.57 to the digit — so this is a real change, not sampling noise.
It is pteff10, isolated
main_menu's only newly-additive top-level element ispteff10.extrashas no newly-additive top-level element, and its score did not move. That is the control: the same change applied to a screen with nothing new moves nothing.- The leaf rule was tested separately by disabling it —
main_menustayed at 13.02, sopteff03/pteff03aare not the cause. That prediction of mine failed and the rule was restored, being provably neutral here.
title did not move despite twelve newly-additive elements, which is consistent:
verify-capture poses at settle t=198, and the title's effect quads —
ptlogo_back2eff1…5, ptlogoall_eff, pteff01 — are transparent there.
🔴 WHY I THOUGHT THIS WAS A COUNTER-EXAMPLE — and it was not. Kept because the premise-check is the lesson
Their own map lists pteff10 as additive on extras and not on main_menu,
and they logged both screens. So either their per-draw log shows main_menu's
pteff10 drawn alpha-over — a direct contradiction between a capture and the
disc bit, on one element — or it was not drawn during that capture. The oracle
comparison independently prefers alpha-over there.
❌ Wrong, and the premise was the failure. The oracle does measure it
additive on main_menu — three sessions, every frame. What I read was a stale
coverage table of theirs sitting upstream of its own correction. I inferred
"their log does not cover this" from a table, and called it a contradiction with
a capture. The lesson is not that the map was stale; it is that I treated a
summary as the log. See the resolution at the foot of this page.
Why the change ships anyway, stated rather than assumed
main_menucarries a ±3.78 capture-phase term in the harness's own note — the capture caught the free-running sweep at an unknown phase. +2.14 is inside that stated uncertainty and cannot adjudicate a disc fact.main_menu_optionsis a sub-region of the same screen and inherits the same sweep.- The decoded source is far better evidenced than the comparison that moved, and it fixes two known defects — twelve title effects drawn with the wrong blend, and a JP/EN asymmetry the port was asserting by omission.
- Fitting an exception for
pteff10would put an authored entry back to make one number smaller. That is the move this project keeps having to undo.
🔴 This was a known regression shipped deliberately, not an unnoticed one — and the decision was right for a stronger reason than the one I used. Not only is +2.14 inside the ±3.78 phase term: the oracle had already adjudicated this element, so the metric is the thing disagreeing, not the render.
What this does not claim
- That the bit is wrong. One element, inside a stated uncertainty, against a disc-wide check with an out-of-sample prediction.
- That
pteff10onmain_menuand onextrasare the same sprite. Not checked. - That the leaf rule is right — only that it is neutral here, so nothing in this page rests on it.
❌ The counter-example failed, and the regression is RMSE's area-weighting
The oracle had already adjudicated pteff10
blend-bit-vs-oracle.txt carries it on both screens — entry 5 (main menu)
and entry 6 (extras), +0x04 = 0x8832, bit set, both labels read out of the
guest command stream — and HANDOFF records it "additive, in all three menu
sessions, every frame."
My premise was a stale coverage table, not a reading of the log. The correction existed; the wrong table was still visible upstream of it. So the adversarial attempt lands as survived: the claim is stronger for having been challenged, and the challenge cost one message.
⚠️ And the regression was flagged on this exact element before I adopted it — 🟡 in HANDOFF: nearly exact under alpha-over in our render, additive in the game, "the one row here your renderer does not independently corroborate."
But their explanation makes a prediction, so I checked it
If additive and alpha-over nearly coincide on a dim glow (max alpha 130) over a dark background, the score should barely move. Mine moved 20 %. That is a real tension and it was worth one measurement.
Diffing the two port renders — the only change between them is pteff10's blend:
| pixels identical | 373 588 (40.5 %) |
| pixels differing by > 3 | 330 794 (35.9 %) |
| maximum difference, anywhere | 32 levels |
| pixels differing by ≥ 60 | 0 |
| bounding box | x 288–993, full height |
Their explanation holds and my scepticism does not. No pixel moves by more than 32/255 — 12.5 % — which is "nearly coincide" measured rather than asserted. What moved the RMSE is area: a third of the frame shifting slightly.
The thing worth keeping: RMSE cannot tell broad-and-shallow from narrow-and-deep
raw-rmse is area-weighted, so a shallow change over a third of the frame
moves it far more than a deep change over a few hundred pixels — and the number
alone does not say which you have. 10.88 → 13.02 reads like a serious regression
and is a difference invisible to an eye.
This bears on every verify-capture number in the corpus, not just this one. A
row that moves should be asked "broad or deep?" before it is called a
regression, and that costs one histogram.
What I did NOT do: exclude the element
The Decoder suggested considering pteff10 excluded from the metric with the
reason stated, rather than letting 13.02 sit as debt. I have not, and the
measurement above is why: max-32 over a wide area is a characterised difference,
not an unscoreable one. Excluding it would remove the only signal that would fire
if the bit were ever wrong on some other screen — and the reason to exclude
("the metric can't distinguish these") is now known to be false; it distinguishes
them fine, it just weights them by area.
The 13.02 stands, with its explanation attached. That is cheaper than an exclusion nobody will revisit.