diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 67cfab20..39d5013a 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -322 sections. Search this before re-deriving anything. +323 sections. Search this before re-deriving anything. * [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28) * [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28) @@ -333,6 +333,7 @@ dies, which is what this file is for. * [The independent pair was an accident — the rule that would make it deliberate](#the-independent-pair-was-an-accident--the-rule-that-would-make-it-deliberate) * [A workflow defect of mine, on its fourth occurrence](#a-workflow-defect-of-mine-on-its-fourth-occurrence) * [The menu residual, decomposed — and half of 13.06 is tone](#the-menu-residual-decomposed--and-half-of-1306-is-tone) +* [Refutation: the peer's tone/geometry positive control rests on a number of mine that cannot carry it](#refutation-the-peers-tonegeometry-positive-control-rests-on-a-number-of-mine-that-cannot-carry-it) ## P0 — the exporter, 2026-08-28 @@ -15672,3 +15673,57 @@ said why, and I reached past it for a quicker check. The tell was that the answe was **uniform** — a residual spread evenly over an entire frame is a comparison fault, not a rendering one, and that is the reading I should have applied before the dimensions. + +## Refutation: the peer's tone/geometry positive control rests on a number of mine that cannot carry it + +`docs/re/structures/title-residual-tone-vs-geometry.md` (`d0eae04`) argues that at +least 68 % of the *title's* residual is spatial. Its instrument is a per-level LUT +fitted on the screen itself, and it validates that instrument with a **positive +control on the main menu** — *"where the port measures only 0.06 % of pixels +differing, so geometry is essentially right"* — closing 70.3 % there. + +📌 **That 0.06 % is mine, and it does not mean what the control needs it to mean.** +`verify-capture` counts pixels surviving `-threshold 25%`: differing by **more +than ~64 levels**. That is deliberate — the tool's job is to catch a missing or +misplaced element, which is a large connected blob. **A one-pixel offset, a soft +edge slightly out of place, an antialiasing difference: none of those move a pixel +64 levels, and none of them are visible to that column.** It establishes *no gross +displacement*, not *geometry is right*. + +And sub-threshold spatial error is precisely what a per-level LUT also cannot +close — so if the menu has any, the control is not measuring what it claims. + +### It does. Measured, with a known negative + +After fitting the LUT, splitting the remaining residual by local gradient: + +| main_menu, LUT-corrected residual | value | +|---|---| +| on **edge** pixels (4.3 % of frame) | **6.94** | +| on **flat** pixels | **2.20** | +| **concentration** | **3.16×** | +| ⚠️ known negative — render vs itself under a pure gamma 0.78 | **0.00 / 0.00** | + +✅ **The known negative is exact, by construction:** a residual that really is a +per-level tone effect is inverted *perfectly* by a per-level LUT, so any nonzero +edge concentration is spatial. The menu's is 3.2×. + +### What this does and does not refute + +* 🔴 **Refuted: the positive control's premise.** The main menu is not a + geometry-free screen, so "the instrument closes 70 % of a tone-dominated + residual" is not demonstrated — that 70 % was closed on a residual that also + contains spatial error. +* ✅ **Their conclusion survives, and I want to be clear about it.** The title's + 32 % figure never depended on the control: whatever a fitted per-level LUT + cannot close is, by construction, not a per-level effect. That argument is + self-standing. **The refutation lands on the validation, not on the result.** +* 📌 **The actionable half is mine.** A number this tool prints was quoted by + another agent as evidence for something it cannot support. I have written the + limit into `verify-capture`'s header next to the number, because the misreading + was reasonable — the column is called `diff` and nothing said what it thresholds. + +⚠️ **Still not settled:** what the menu's spatial error *is*. 3.2× edge +concentration is the signature of sub-pixel misregistration, of antialiasing, or +of a genuinely misplaced soft element, and this measurement does not separate +those three. I am not guessing between them. diff --git a/tools/port/verify-capture b/tools/port/verify-capture index 806cd8cc..8075e156 100755 --- a/tools/port/verify-capture +++ b/tools/port/verify-capture @@ -9,6 +9,23 @@ # this file did not exist. The port has had a harness comparing two renderers # that share its assumptions, and none comparing it to the game. # +# 🔴 WHAT THE `diff` COLUMN DOES NOT SAY. It counts pixels surviving +# `-threshold 25%` -- differing by more than ~64 levels. That is deliberate: it +# detects a missing or MISPLACED element, which is a large connected blob. It is +# blind to sub-threshold spatial error -- a one-pixel offset, a soft edge in a +# slightly wrong place, an antialiasing difference -- because none of that moves +# a pixel 64 levels. +# +# So `main_menu 0.06%` means NO GROSS DISPLACEMENT. It does NOT mean the +# geometry is right, and it has already been read that way by another agent: +# `docs/re/structures/title-residual-tone-vs-geometry.md` uses this screen as a +# tone-only positive control, citing this number as "geometry is essentially +# right". Measured 2026-08-31 against that capture: after fitting a per-level LUT +# -- the most general tone model there is -- the remaining residual is 6.94 on +# edge pixels against 2.20 on flat ones, a 3.2x concentration. A purely tonal +# residual leaves a per-level LUT exactly 0.00 (checked, by construction). The +# menu carries spatial error this column cannot see. +# # ⚠️ That gap is not academic. `docs/re/captures/ORACLE-CAPTURES.md`: two # renderers agreeing proves nothing, and this corpus has been bitten three times # -- the dropped `pteff05` background, the scale-0 rect, and `rest()`. Every one