port: enumerate the free-running clocks, and test rather than enumerate
The Decoder's point was that this is an unenumerated set, not a missing guard. The enumeration is possible on my side and found a THIRD clock: the leaf sets holding = false explicitly and reads time_units, pinned only by --leaf-time or --time, biting on loop_leaf_on_screens = [title]. I would not have found it by waiting for a row to drift. But the general answer is a test that fails when the set is non-empty. Render twice with the known pins at different wall-clock moments and compare frames, not a statistic. --screen + --time + --loop-phase: all 16 byte-identical, though --time freezes time_units itself so that pins every derived clock. --menu --script=wait + --loop-phase, where the drift lived: frames differ by 4378 px -- but max per-channel 2.86 against 158.4 for a genuinely moving element, 55x apart. Nothing moves; the residual is rasterisation noise. The discriminating scale is what makes the test an answer. And the reason I nearly missed it: last iteration I reported three pinned runs returning 13.26 and called the harness reproducible. verify-capture prints RMSE to two decimals and the residual is 0.0565 -- below its own resolution. The frames were never identical; the statistic could not tell. I verified reproducibility with an instrument that rounds away the thing being verified. Conclusion unchanged: 2.86/255 changes no result. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -9,7 +9,7 @@ dies, which is what this file is for.
|
||||
|
||||
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
|
||||
|
||||
173 sections. Search this before re-deriving anything.
|
||||
174 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)
|
||||
@@ -184,6 +184,7 @@ dies, which is what this file is for.
|
||||
* [Auditing the whole tree for "a deleted value that something still supplies"](#auditing-the-whole-tree-for-a-deleted-value-that-something-still-supplies)
|
||||
* [Counting the fallbacks instead of inspecting them — and one I had misjudged](#counting-the-fallbacks-instead-of-inspecting-them--and-one-i-had-misjudged)
|
||||
* [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)
|
||||
|
||||
<!-- /INDEX -->
|
||||
## P0 — the exporter, 2026-08-28
|
||||
@@ -9906,3 +9907,64 @@ own 1.2 flatness. **A margin only means something against the noise it sits on.*
|
||||
because the drift is 0.065 RMSE and the smallest margin any of them turned on was
|
||||
0.14 % differing area. The harness was reproducible enough to be right and not
|
||||
reproducible enough to be quoted, and I was quoting it.
|
||||
|
||||
## Answering "an unenumerated set" — don't enumerate, test
|
||||
|
||||
The Decoder's closing point on the drift: *"that's not a missing guard, it's an
|
||||
unenumerated set, and I don't think either of us has a way to enumerate everything
|
||||
on this screen that moves on its own."* You do not need to. You need a test that
|
||||
**fails when the set is non-empty**.
|
||||
|
||||
### The enumeration is possible on my side, and found a third
|
||||
|
||||
Every use of the free-running clock in `screen_view.gd`:
|
||||
|
||||
| site | pinned by |
|
||||
|---|---|
|
||||
| looping focus record | `--loop-phase` ✅ |
|
||||
| the spin | `--loop-phase` ✅ *(added last iteration)* |
|
||||
| **the leaf** — sets `holding = false` explicitly and reads `time_units` | `--leaf-time`, or `--time` |
|
||||
| `pose_at(element, time_units)` | clamped by `holding` — settles, not free-running |
|
||||
|
||||
🔴 **A third clock**, which I would not have found by waiting for a row to drift.
|
||||
It only bites on `loop_leaf_on_screens` — `["title"]`.
|
||||
|
||||
### The test, and the scale that makes it mean something
|
||||
|
||||
Render twice with the known pins, at different wall-clock moments, and compare
|
||||
**frames** — not a statistic.
|
||||
|
||||
* `--screen` + `--time` + `--loop-phase`, all 16 screens: **byte-identical.**
|
||||
(`--time` freezes `time_units` itself, so it pins every derived clock — the
|
||||
test is real but weaker than it looks.)
|
||||
* `--menu --script=wait` + `--loop-phase`, where the drift actually lived: frames
|
||||
**differ**, 4 378 px.
|
||||
|
||||
⚠️ That difference is **not motion**:
|
||||
|
||||
| | max per-channel | mean |
|
||||
|---|---|---|
|
||||
| two pinned runs | **2.86** | 0.0025 |
|
||||
| a genuinely moving element (spin, phase 0 vs 30) | **158.4** | 0.037 |
|
||||
|
||||
✅ 55× apart. Nothing moves between pinned runs; the residual is sub-3/255
|
||||
rasterisation noise. **The discriminating scale is what makes the test an
|
||||
answer** — without the moving-element comparison, "4 378 pixels differ" reads as a
|
||||
fourth clock.
|
||||
|
||||
### 🔴 And the reason I nearly missed it: my verification was too coarse to see what it checked
|
||||
|
||||
Last iteration I reported *"three pinned runs return 13.26 exactly"* and called the
|
||||
harness reproducible. `verify-capture` prints RMSE to **two decimals**, and the
|
||||
residual is **0.0565** — below its own resolution. The frames were never identical;
|
||||
the statistic could not tell.
|
||||
|
||||
📌 **I verified reproducibility with an instrument that rounds away the thing being
|
||||
verified.** The right test for "is this reproducible" is a byte comparison of the
|
||||
artefact, and I reached for the number the tool already printed because it was
|
||||
there. Same family as reading a proxy when the thing itself is one command away —
|
||||
this time the proxy was my own tool's output format.
|
||||
|
||||
⚠️ Conclusion unchanged: 2.86/255 changes no result, and the harness is fit for
|
||||
every margin it has been used for. What was wrong was the claim's basis, not the
|
||||
claim.
|
||||
|
||||
Reference in New Issue
Block a user