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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 15:47:08 +00:00
parent 49958ff090
commit 9d43926231

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
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)
<!-- /INDEX -->
## 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 |
| 30105 | 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.440.88 RMSE** against a run-to-run
floor of **0.0565** — 815×, 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.