diff --git a/authored/timing.json b/authored/timing.json index 882d63e2..cc038168 100644 --- a/authored/timing.json +++ b/authored/timing.json @@ -145,27 +145,38 @@ ], "black_hold_units": 0, "black_hold_why": [ - "0, AND THAT IS NOT 'RIGHT' -- IT IS THE VALUE THAT INVENTS NOTHING.", + "0, RE-DERIVED against FOUR measurements, not inherited from three.", "", - "This was 9 units, measured in the draw stream. The Decoder has now measured", - "the black gap on THREE transitions off the running game and it is not a", - "constant: menu->title 0 units, title->menu 4, EXTRAS->menu 6. Not a", - "per-button property, not a per-direction property. Their recommendation is to", - "treat this as unauthored rather than uniform-at-9.", + "The Decoder's measured black gaps are now 0, 6, 4, 6 units across four", + "transitions. When this was set to 0 the multiset was (0, 4, 6), and they held", + "me to re-stating the choice against the new data rather than carrying it --", + "the same standard I applied to check-all's stale allowance.", "", - "9 was outside the measured range entirely -- wrong for all three, by +9, +5", - "and +3, i.e. up to a sixth of a second of black the game does not show.", + "The arithmetic moved AGAINST 0 and it is worth writing down rather than", + "burying: a uniform 6 is wrong on 2 of 4 transitions for a total error of 8;", + "0 is wrong on 3 of 4 for a total of 16. Choosing 0 cost 1.7x the best fit on", + "three measurements and costs 2.0x on four. 0 is now the MINORITY outcome --", + "three of four transitions do have a gap.", "", - "WHY 0 AND NOT 4. A uniform 4 minimises total error across the three samples", - "(6 units against 0's 10). That is FITTING THREE SAMPLES, and a fit chosen for", - "its residual is the thing this corpus keeps having to withdraw. 0 has a", - "reason that is not a fit: it adds no black the game does not have, which is", - "the same tie-breaker `input_during_transition` already uses in this file --", - "the choice that invents the least. It is also measured-CORRECT for one real", - "transition, which no other uniform value beats on principle.", + "IT IS STILL 0, and the reason is unchanged because it was never the fit: 0", + "adds no black the game does not have, which is the tie-breaker", + "input_during_transition already uses in this file, and it is measured-correct", + "for a real transition rather than for an average of them. Picking 6 because", + "it appears twice is choosing a mode from four samples with no rule behind it.", "", - "The error is now a MISSING gap of at most 6 units on two transitions rather", - "than an INVENTED one of up to 9 on all three. Delete this entry the day the", - "rule is known; the Decoder cannot state it yet and neither can I." + "ALSO CHANGED: the gap is NOT machine-dependent. It was defensible to hold 0", + "partly because the quantity might be a load and therefore unauthorable; the", + "Decoder has now shown it is deterministic to the frame -- bundle size runs the", + "wrong way, and a repeat run moved press-to-first-change by ~12 frames while", + "the gap did not move at all. So this is a real game quantity with a rule", + "nobody has found, not noise. That REMOVES an excuse for 0 without supplying a", + "value.", + "", + "TRIPWIRE, because 'invent nothing' can stop being conservative: if the gap is", + "non-zero in most transitions and no rule emerges, systematically omitting a", + "real quantity is no longer the cautious choice -- it is a different invention.", + "Revisit at the next measurement that is not 0, or the moment a rule appears.", + "The port is currently wrong by 4-6 units on three of four known transitions", + "and says so here rather than in a number that looks decided." ] } diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index 8a95edf6..0a91c90b 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -166 sections. Search this before re-deriving anything. +167 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) @@ -177,6 +177,7 @@ dies, which is what this file is for. * [🔴 `check-all` excused two failing rows with a reason that is measurably false](#check-all-excused-two-failing-rows-with-a-reason-that-is-measurably-false) * [`black_hold_units` 9 → 0, and why not the value that fits best](#black_hold_units-9--0-and-why-not-the-value-that-fits-best) * ["Already up to date" is not evidence that I am current](#already-up-to-date-is-not-evidence-that-i-am-current) +* [Re-deriving `black_hold_units` against four measurements, not three](#re-deriving-black_hold_units-against-four-measurements-not-three) ## P0 — the exporter, 2026-08-28 @@ -9537,3 +9538,52 @@ of signal taken as a positive one.** main) is sound and will apply again. What changes is that its output is not reassurance. And my `Cargo.toml` pin is on a tag whose commit is **unmerged**: correct today, fragile, because nothing protects it. + +## Re-deriving `black_hold_units` against four measurements, not three + +They answered ask #2 — **the gap is not a load; it is deterministic to the +frame** — and then held me to something sharper: *"you now have four gap +measurements, not three. The multiset changed after you chose 0."* + +That is my own standard for `check-all`'s stale allowance turned around, and it +applies. Re-derived: + +| uniform | total error | wrong on | +|---|---|---| +| **0** | **16** | **3 of 4** | +| 4 | 8 | 3 of 4 | +| 6 | 8 | 2 of 4 | +| 9 (the old value) | 20 | 4 of 4 | + +🔴 **The arithmetic moved against 0.** Choosing it cost 1.7× the best fit on three +measurements and costs **2.0×** on four, and 0 is now the *minority* outcome — +three of four transitions do have a gap. + +✅ **It is still 0, because the reason was never the fit.** 0 adds no black the +game does not have, and it is measured-correct for a *real transition* rather than +for an average of them. Picking 6 because it appears twice is choosing a mode from +four samples with no rule behind it — and their whole finding is that a rule +exists and nobody has found it. + +⚠️ **One of my reasons is gone, though, and I am not keeping it quietly.** Part of +the case for 0 was that the quantity might be machine-dependent and therefore +unauthorable. It is not: bundle size runs the wrong way (build 4 is 12.3 MB and +gaps zero frames; build 5 is 7.0 MB and gaps 3 and 2), and a repeat run moved +press-to-first-change by ~12 frames while the gap did not move at all. **Removing +the machine-dependence excuse does not supply a value**, but it does mean 0 now +rests on one leg rather than two. + +📌 **A tripwire, because "invent nothing" can stop being conservative.** If the gap +is non-zero in most transitions and no rule emerges, systematically omitting a +real quantity is not caution — it is a different invention. Revisit at the next +non-zero measurement or the moment a rule appears. The port is currently wrong by +4–6 units on three of four known transitions, and `authored/timing.json` now says +so in the `why` rather than in a number that looks decided. + +### Settled: the outgoing ramp is the declared final ramp + +My export gives `title` **8**, `main_menu` **10**, `extras` **10**; their captures +measure 10u/5f, 8u/4f, 10u/5f. ✅ Two genuinely independent routes — disc and +running game — agreeing on a three-value multiset. They propose treating it as +settled and I agree: the port already plays each group to its own end, so nothing +is authored and nothing needs to change.