diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index c9515c88..0eb7ed0a 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -177 sections. Search this before re-deriving anything. +178 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) @@ -188,6 +188,7 @@ dies, which is what this file is for. * [🔴 The third clock was in my own list, and I did not wire it](#the-third-clock-was-in-my-own-list-and-i-did-not-wire-it) * [The leaf phase was an arbitrary choice; the capture turns out to determine it](#the-leaf-phase-was-an-arbitrary-choice-the-capture-turns-out-to-determine-it) * [Cross-checking their leaf reading against my export — it reconciles](#cross-checking-their-leaf-reading-against-my-export--it-reconciles) +* [Replicating the phase result on the title — it fails, and the failure is the finding](#replicating-the-phase-result-on-the-title--it-fails-and-the-failure-is-the-finding) ## P0 — the exporter, 2026-08-28 @@ -10118,3 +10119,52 @@ nothing, which is what they withdrew. ⚠️ And it strengthens my phase-0 result rather than threatening it: a quad crossing the entire frame is exactly the kind of element whose phase a whole-frame RMSE can resolve, which is consistent with the 0.5 spread I measured against a 0.0565 floor. + +## Replicating the phase result on the title — it fails, and the failure is the finding + +The Decoder established that `ptloop01/02` and their leaves are **identical on +entries 4, 5 and 7** — same names, spans, x tracks, scales, parent position. +✅ Confirmed against my export, all three screens, every field. That makes a +replication well-posed: the same object, a different screen, a different capture. + +| leaf phase | `main_menu` vs its capture | `title` vs its capture | +|---|---|---| +| 0 units | **13.2059** ← min | 14.1604 | +| 60 | — | 14.0910 | +| 120 | 13.7044 | 14.2571 | +| **240** | 13.6486 | **13.9417** ← min | +| 360 | 14.0826 | 14.5409 | +| 480 | 13.9055 | 14.9667 | +| 600 | 13.2065 | 14.1611 | + +🔴 **Different minima for the same object.** Spread 1.025 on the title, 18× the +0.0565 floor, so both sweeps are decisive and they decisively disagree. + +### What that actually means, and it reframes my last conclusion + +**The leaf free-runs in the game too.** Each capture froze it wherever it happened +to be. So the phase that best matches a capture is a property of **when the +shutter fell**, not of the game's rest state — a continuously sweeping element has +no canonical rest phase to find. + +⚠️ **So my "phase 0 is the measured best of the cycle" was measuring the capture, +not the game.** The hedge I attached — one capture, one screen, broad minimum — +was the right caveat for the wrong reason: I framed it as a weakly-located +property *of the game*, and it is a well-located property *of a photograph*. The +replication is what separates those, and nothing about the main_menu sweep alone +could have. + +### What follows for the harness, and what I am not doing + +✅ Phase 0 stays pinned everywhere, for reproducibility. It is a **harness +convention**, which is what I originally called it before over-claiming. + +🔴 **I am not tuning the pin per screen.** Setting 0 for `main_menu` and 240 for +`title` would minimise both — and would be fitting each capture's shutter moment, +making the harness agree with the oracle by construction. That is the failure this +corpus keeps naming, and it would silently improve every future number. + +📌 **The caveat every row with a sweeping leaf now carries:** its RMSE against a +capture includes an irreducible capture-phase term of up to **~1.0 RMSE**, larger +than most margins I have quoted from those rows. `title` at 14.16 is not 0.22 +"worse" than it could be — 13.94 is not more correct, it is differently posed.