diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index bf1d2c64..89062c09 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -229 sections. Search this before re-deriving anything. +230 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) @@ -240,6 +240,7 @@ dies, which is what this file is for. * [P0 gate — recorded at last, and the gap it belongs to](#p0-gate--recorded-at-last-and-the-gap-it-belongs-to) * [Their sufficiency gap, run on `authored/` — clean, after I nearly reported 35 false positives](#their-sufficiency-gap-run-on-authored--clean-after-i-nearly-reported-35-false-positives) * [Their absence shape on my own citations — and the wording gap in my P0 closure](#their-absence-shape-on-my-own-citations--and-the-wording-gap-in-my-p0-closure) +* [The off-edge splash residual, localised — three mechanisms ruled out, one honest description](#the-off-edge-splash-residual-localised--three-mechanisms-ruled-out-one-honest-description) ## P0 — the exporter, 2026-08-28 @@ -12023,3 +12024,59 @@ and certifying in the gate's vocabulary is a substitution nobody performs explicitly.** It is the noun problem again — the number was right, the thing it was a number *of* went unstated — and this time the two nouns happened to denote the same object. + +## The off-edge splash residual, localised — three mechanisms ruled out, one honest description + +The last open technical question I own: after excluding glyph edges, the splashes +differ from the game by 0.82–1.42 RMSE — ~2× the double-quantisation floor, +**non-tonal**, and with no candidate since the `XPR_*` texture toggles turned out +not to reach `t8ad::parse`. + +**Tested the one signature left: is it positional?** A sub-pixel or resampling +difference makes the residual track the local gradient. Rule stated first: r > 0.5 +to call it gradient-linked. + +| | gradient | brightness *(control)* | +|---|---|---| +| `publisher_logo` | +0.109 | +0.047 | +| `developer_logos` | +0.307 | **+0.471** | + +🔴 **Rejected.** Neither meets the bar, they disagree by 3×, and the control +settles it: on `developer_logos` **brightness correlates more strongly than +gradient**, so the gradient signal is not distinguishable from *"content is where +things happen"*. **Not positional.** + +### Where the residual actually lives + +The brightness correlation pointed somewhere better. Signed residual +(render − capture) by capture brightness, off-edge: + +| band | 0–15 | 16–47 | 48–95 | 96–159 | 160–255 | +|---|---|---|---|---|---| +| `publisher_logo` | **−0.00** | +1.68 | −1.09 | −2.48 | +0.45 | +| n | **843 025** | 542 | 951 | 312 | 12 743 | +| `developer_logos` | **−0.02** | +2.19 | +0.74 | −1.57 | −0.96 | +| n | **812 111** | 26 196 | 4 498 | 5 232 | 2 832 | + +📌 **98 % of the off-edge area has a residual of essentially zero.** The entire +0.82–1.42 RMSE comes from the ~2 % of pixels that are lit — the logo interiors. + +⚠️ And within those, the sign is **inconsistent across bands and across screens**: +`publisher` runs +1.68, −1.09, −2.48, +0.45 while `developer` runs +2.19, +0.74, +−1.57, −0.96. **Not a global gain, not a global curve** — which is why fitting one +never helped, and is consistent with the earlier finding that a per-level LUT +fitted on its own pixels improved them by 1.6 %. + +### What this is worth + +✅ Three mechanisms are now ruled out with evidence: **global tone** (a curve +fitted on its own data barely moves it), **texture decode** (the toggles do not +reach the sprite path), **positional** (gradient loses to brightness). + +✅ And the description is far better than "0.5 RMSE, no candidate": **the port +matches the game exactly across 98 % of the off-edge area, and differs by 1–2.5 +levels inside the lit logo, with no consistent direction.** + +⚠️ Still no mechanism. That is now a much smaller and better-posed question than +it was — but naming what it is *not* four times over is not the same as finding +what it is, and I am not going to invent a fifth candidate to close it.