From 9d4392623145f624f2276330c3078782e25cc4d1 Mon Sep 17 00:00:00 2001 From: Sylpheed port agent Date: Sun, 30 Aug 2026 15:47:08 +0000 Subject: [PATCH] port: the capture determines the leaf phase, and phase 0 is the measured minimum Last iteration I pinned the leaf at phase 0 for reproducibility and said which pose the game shows was not settled by it. Asked the capture, with the decision rule stated first: the spread must beat the noise floor decisively or 0 stays an admitted arbitrary choice. Phase 0 is the global minimum at 13.2059, rising to 14.08 mid-cycle and returning to 13.2065 at 600 units -- margin 0.44-0.88 against a run-to-run floor of 0.0565, 8-15x, which meets the rule. 0 and 600 agreeing confirms the cycle closes, independently supporting the leaf's declared span. The Decoder's point is what makes it readable: the gamma offset moves every candidate together and nearly cancels in the ranking, so nine renders differing only in leaf phase compare cleanly on a ~13.2 floor nobody can remove. Broad minimum -- 0 and 15 units identical to four decimals -- so this constrains the phase to the first 15 units of a 600-unit cycle, not to a point, from one capture of one screen. And the sweep that nearly said the opposite: --leaf-time takes SECONDS, so my first sweep of 0..500 was 0 to 30000 units, every value past the group end, returning 13.2059 six times. Third instance of the seconds-versus-units confusion, after --time=50 and after I wrote the identical-output tell into METHOD. Made worse because 0 and 30000 genuinely coincide, so the flat reading was partly real. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF --- docs/port/DECISIONS.md | 52 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 9d287ba0..8f6f40ed 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -175 sections. Search this before re-deriving anything. +176 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) @@ -186,6 +186,7 @@ dies, which is what this file is for. * [The oracle harness was nondeterministic, and I quoted its numbers for a dozen iterations](#the-oracle-harness-was-nondeterministic-and-i-quoted-its-numbers-for-a-dozen-iterations) * [Answering "an unenumerated set" — don't enumerate, test](#answering-an-unenumerated-set--dont-enumerate-test) * [🔴 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) ## P0 — the exporter, 2026-08-28 @@ -10019,3 +10020,52 @@ by this and I am not claiming it is. compared an in-box margin against a whole-frame spread; I tested a pin I had documented as insufficient. Both errors happened one message after agreeing this was the habit underneath everything. + +## The leaf phase was an arbitrary choice; the capture turns out to determine it + +Last iteration I pinned the leaf at phase 0 to make the harness reproducible and +said plainly that **which pose the game shows is not settled by this**. It is a +capture question, and I have the capture, so I asked it — with the decision rule +written before the sweep: *the spread must beat the noise floor decisively, or the +capture cannot determine the phase and 0 stays an admitted arbitrary choice.* + +| leaf phase | RMSE vs the oracle | +|---|---| +| **0 units** | **13.2059** | +| 15 | 13.2059 | +| 30–105 | 13.2062 → 13.5889 | +| 120 | 13.7044 | +| 240 / 360 / 480 | 13.6486 / 14.0826 / 13.9055 | +| **600** | **13.2065** | + +✅ **Phase 0 is the global minimum**, by **0.44–0.88 RMSE** against a run-to-run +floor of **0.0565** — 8–15×, which meets the rule. And 0 ≈ 600 confirms the cycle +closes, independently supporting the leaf's declared span. + +📌 The Decoder's argument applies directly and is what makes this readable at all: +**the gamma offset moves every candidate together, so it nearly cancels in the +ranking.** Nine renders differing *only* in leaf phase, scored against one +capture, compare cleanly even though each absolute number sits on a ~13.2 floor +nobody can remove. + +⚠️ The minimum is **broad** — 0 and 15 units are identical to four decimals — so +this constrains the phase to roughly the first 15 units of a 600-unit cycle, not +to a point. And it is one capture of one screen. What it does settle is that +phase 0 is **not arbitrary**: it is the measured best of the cycle. + +### 🔴 And the sweep that nearly said the opposite: seconds versus units, again + +My first sweep ran `--leaf-time` over 0…500 and returned **13.2059 for all six** — +the identical-output tell. `--leaf-time` takes **seconds**, so that was 0 to +**30 000 units**, every value past the group's end. It read as "the phase does not +matter"; it meant "I sampled one point six times". + +**Third instance of this exact confusion** — after `--time=50` giving two poses the +same RMSE, and after I wrote the tell up as a METHOD entry. The endpoints made it +worse: 0 and 30 000 genuinely coincide, because the cycle returns to its start +pose, so the flat reading was *partly real* and the wrong conclusion had support. + +⚠️ It also briefly made me doubt a correct earlier result. The `--leaf-time=0` +pinning (max 89.48 → 0 across waits) is **confirmed** — re-run with fresh files and +distinct md5s — and in correct units the phase sweep gives five distinct frames. +The flag was never the problem.