diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 496c6deb..8b21b04b 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -185 sections. Search this before re-deriving anything. +186 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) @@ -196,6 +196,7 @@ dies, which is what this file is for. * [Their draw-stream result checked against my export — three confirmations and one correction](#their-draw-stream-result-checked-against-my-export--three-confirmations-and-one-correction) * [Nested leaves may advance at half rate — a quantified defect in shipped output](#nested-leaves-may-advance-at-half-rate--a-quantified-defect-in-shipped-output) * [Their Route 1 is closed for the whole archive, not just the title](#their-route-1-is-closed-for-the-whole-archive-not-just-the-title) +* [The off-edge splash residual is **not** tonal — and I was comparing it to the wrong floor](#the-off-edge-splash-residual-is-not-tonal--and-i-was-comparing-it-to-the-wrong-floor) ## P0 — the exporter, 2026-08-28 @@ -10520,3 +10521,52 @@ screen is worth their time trying. clocks I enumerated — looping focus record, spin, leaf — are all sub-records, and that is now explained rather than observed. Their plate finding is the same shape: `ptbtn00` is a one-shot fade and the repeating pulse comes from its nested `.rat`. + +## The off-edge splash residual is **not** tonal — and I was comparing it to the wrong floor + +I said the remaining 0.82–1.42 off-edge residual was *"consistent with the binned +tone table leaving about a level of error"* and that a per-level correction was +the test I had not run. Ran it, deriving the curve on one splash and applying it +to **the other**, because fitting and scoring on the same pixels succeeds by +construction: + +| `developer_logos`, off-edge | RMSE | +|---|---| +| uncorrected | 2.7512 | +| **single gamma 0.85** | **0.9040** | +| per-level curve from `publisher_logo` | 1.3795 | + +🔴 **The per-level curve is worse than a single exponent**, cross-applied. And the +control that settles it: + +| `publisher_logo`, off-edge | RMSE | +|---|---| +| single gamma 0.85 | 1.4440 | +| **its own fitted curve** | **1.4209** | + +**A tone curve fitted on those very pixels improves them by 1.6 %.** If the +residual were a tone-mapping error, fitting the tone mapping on its own training +data should collapse it. It does not, so **the residual is not tonal** — my +hypothesis is refuted by the strongest test available to it. + +### ⚠️ And the residual is smaller than I made it sound + +I called 0.82–1.42 *"15–25× the 0.06 rasterisation floor"*. That is the wrong +comparison: 0.06 is **render-to-render** reproducibility, which is the floor for +asking *does my renderer repeat itself*. For **render-versus-capture** the floor +includes 8-bit quantisation on both sides — uniform rounding error has RMSE +1/√12 ≈ 0.289 per image, so a difference of two independently quantised images +sits at **≈ 0.41** before anything is wrong at all. + +Against that floor, 0.90 is **~2.2×**, not 25×. It is roughly **one level in 255**. + +📌 So the honest statement of the splash rows is stronger than what I had: +off-edge, after a single gamma, the port differs from the game by about **twice +the irreducible quantisation floor**, and the shape of what remains is *not* +tonal. I quoted the same number twice this week against a floor chosen for a +different question — the same error as comparing an in-box margin to a whole-frame +spread, which I flagged in someone else's work two days ago. + +⚠️ What is still unexplained is now a much smaller thing: ~0.5 RMSE above +quantisation, off-edge, non-tonal, on screens with no free-running element. I have +no candidate for it and I am not going to invent one.