port: the game's clock is frame-based, ours is time-based, and 60 is finally supported
The --framerate_limit=30 run refuted the time-based reading on every discriminating row, against its author's own expectation: modal alpha step stayed 17 where time-based predicts 34, units/second halved to 30.2, the publisher dwell doubled to 8.450 s. Both controls passed FIRST -- the limiter demonstrably took effect, and all 8 splash quad rects were identical, so nothing but the frame rate differed. 255 x 1 / 15 = 17 at 28.4, 51.4 and 54.8 presents/s alike. THE GAME ADVANCES 1 UNIT PER PRESENTED FRAME. This port advances `time_units += delta * units_per_second`. Two different mechanisms that agree at exactly one frame rate -- 60 Hz, the only rate the console ever asked the game to be right at. 🔴 DO NOT MAKE THE PORT FRAME-BASED TO MATCH THE GAME, and the reason is now in authored/timing.json so nobody "fixes" it. A time-based port reproduces a 60 Hz console on hardware that is not 60 Hz; a frame-based one drifts on every machine that is not -- and this port has measured ITSELF between 9.7 and 69.4 fps depending on the renderer. Matching the game's mechanism would import a fragility the game never had to survive, because the game only ever ran on one box. ⚠️ BUT IT SHARPENS WHAT 60 CLAIMS. If units/second IS the present rate, then `keyframe_units_per_second = 60` is no longer "the unit is 1/60 s". It is "the game presented these screens at 60 Hz on the console" -- a harder statement, and checkable. ✅ And supported for the first time. Canary unlimited presents at 51-55 Hz with a splash dwell of 4.30/4.60/4.37 s. A natively 30 Hz game would present at ~30 in Canary too -- the framerate_limit run proves it, since forcing 30 made that same splash take 8.45 s. It does not take 8.45 s unforced. So the game asks for ~60. Kept as `authored`, not promoted: this is inference over three measurements rather than a measurement of units per second. It becomes `measured` when someone reads the console's present rate for these screens directly. 🔴 AND IT CLOSES THE CONSTANT AS A CAUSE OF FINDING 3, in the direction that matters. Under the frame-based model the only alternative is a 30 Hz console, which puts the plate at 236/30 = 7.87 s -- LATER than the 3.93 s shipping, not earlier. There is NO console present rate that makes the plate arrive sooner than this port already shows it. The human reported it late; no value of this constant can produce that. The method note is theirs and it is the durable part: four positions on this number were inference over a measured quantity; this one changed an input and watched what moved. The opportunistic comparison -- two captures that happened to differ -- pointed exactly the wrong way, because nothing controlled what else differed between them. One designed capture settled it against its author's expectation. Not settled: finding 3, still with no surviving cause; the clock origin, which they are taking next and which every ratio and count in this account survives; the ~1.0-1.2 menu residual; the allowance's grep trigger. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018AHUQvXGyNcKonSEWsgWcX
This commit is contained in:
@@ -215,7 +215,50 @@
|
||||
"path -- `tools/port/check-citations` flagged the first version of this very",
|
||||
"paragraph as DANGLING, in the entry where I was recording the lesson about",
|
||||
"dangling citations. The check does not care about a disclaimer, which is",
|
||||
"correct: a path that does not resolve does not resolve."
|
||||
"correct: a path that does not resolve does not resolve.",
|
||||
"",
|
||||
"✅ 2026-09-01 (settled) — THE GAME'S CLOCK IS FRAME-BASED, 1 UNIT PER PRESENT.",
|
||||
"Measured by the Decoder with a DESIGNED experiment rather than an inference:",
|
||||
"`--framerate_limit=30` halved units/second to 30.2, doubled the publisher dwell",
|
||||
"to 8.450 s, and left the modal alpha step at 17 where a time-based clock",
|
||||
"predicts 34. Both controls passed first -- the limiter demonstrably took effect,",
|
||||
"and all 8 splash quad rects were identical, so nothing but the frame rate",
|
||||
"differed. `255 x 1 / 15 = 17` at 28.4, 51.4 and 54.8 presents/s alike.",
|
||||
"",
|
||||
"⚠️ THIS CHANGES WHAT 60 MEANS HERE, AND MAKES IT MORE FALSIFIABLE. If the game",
|
||||
"advances 1 unit per present, its units/second IS its present rate. So",
|
||||
"`keyframe_units_per_second = 60` is now equivalent to the claim:",
|
||||
"",
|
||||
" the game presented these screens at 60 Hz on the console.",
|
||||
"",
|
||||
"That is a sharper statement than 'the unit is 1/60 s' and it is checkable.",
|
||||
"",
|
||||
"✅ AND IT IS SUPPORTED, which the constant has not been until now. Canary",
|
||||
"unlimited presents at 51-55 Hz and the splash dwell is 4.30/4.60/4.37 s over",
|
||||
"three cold boots. A natively 30 Hz game would present at ~30 in Canary too --",
|
||||
"which the framerate_limit run confirms, since forcing 30 made the same splash",
|
||||
"take 8.45 s. It does not take 8.45 s unforced. So the game asks for ~60, not 30.",
|
||||
"",
|
||||
"🔴 AND THAT CLOSES THE CONSTANT AS A CAUSE OF 'THE PLATE IS LATE', for a NEW",
|
||||
"reason and in the direction that matters. Under the frame-based model the only",
|
||||
"alternative console rate is 30 Hz, which puts the plate at 236/30 = 7.87 s --",
|
||||
"LATER than the 3.93 s the port ships, not earlier. There is no console present",
|
||||
"rate that makes the plate arrive sooner than it already does here.",
|
||||
"",
|
||||
"⚠️ KEPT AS `authored`, NOT PROMOTED TO `measured`. The chain is inference over",
|
||||
"three measurements (frame-based clock; Canary's unlimited present rate; the",
|
||||
"dwell corpus) rather than a measurement of units per second. It becomes",
|
||||
"`measured` the day someone reads the console's present rate for these screens",
|
||||
"directly.",
|
||||
"",
|
||||
"📌 AND THE PORT'S OWN DESIGN IS DELIBERATELY NOT THE GAME'S, which is worth",
|
||||
"stating so nobody 'fixes' it. The game is frame-based; this port is time-based",
|
||||
"(`time_units += delta * units_per_second`). They agree at 60 fps, which is the",
|
||||
"only rate the console ever asked the game to be right at. A time-based port",
|
||||
"reproduces a 60 Hz console on hardware that is not 60 Hz; a frame-based port",
|
||||
"would drift on every machine that is not -- and this port has measured itself at",
|
||||
"9.7 to 69.4 fps depending on the renderer. DO NOT make the port frame-based to",
|
||||
"match the game."
|
||||
],
|
||||
"kind": "authored",
|
||||
"source": "docs/re/ui-keyframe-time-unit.md, docs/port/HANDOFF.md",
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# If 120 units/s is right, the switch is one constant — audited, and pre-registered
|
||||
|
||||
**Status:** ✅ **RESOLVED — 60 is right and is now positively supported.** 120 is
|
||||
withdrawn by its author. The port never moved, so nothing has to be undone.
|
||||
**Status:** ✅ **SETTLED by a designed experiment.** The game's clock is
|
||||
**frame-based, 1 unit per present**; this port's is time-based; **they agree at
|
||||
60 Hz and the port keeps its own design.** 120 is withdrawn by its author. The
|
||||
port never moved, so nothing has to be undone.
|
||||
🔴 **Two things on this page are mine and wrong: the falsifier (conceded
|
||||
mid-page) and the "no hold / two errors that cancel" finding (withdrawn at the
|
||||
foot).** Written
|
||||
@@ -279,3 +281,76 @@ established from this side rather than assumed.
|
||||
of the value the port already ships; every other candidate died earlier. The
|
||||
clock origin remains untouched, and every quantity in the resolved account is a
|
||||
ratio or a count, so a common offset survives all of it.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# ✅ Settled: the game is frame-based, the port is time-based, and that is correct
|
||||
|
||||
`--framerate_limit=30` — the run this page asked for — refuted the time-based
|
||||
reading on every discriminating row, **against its author's own expectation**:
|
||||
|
||||
| | predicted if time-based | **measured at 30 fps** |
|
||||
|---|---|---|
|
||||
| modal alpha step | 34 | **17** (unchanged) |
|
||||
| units/second | 60 | **30.2** (halved) |
|
||||
| publisher dwell | 4.25 s | **8.450 s** (doubled) |
|
||||
|
||||
Both controls passed *first*: the limiter demonstrably took effect (28.4
|
||||
presents/host-s against 51–55, interval mass moving to two vblanks, 422 of 468),
|
||||
and all 8 splash quad rects were identical, so nothing but the frame rate
|
||||
differed. **`255 × 1 / 15 = 17`** at 28.4, 51.4 and 54.8 presents/s alike.
|
||||
|
||||
## What that changes for the port: nothing — but for a reason worth writing down
|
||||
|
||||
The game advances **1 unit per presented frame**. This port advances
|
||||
`time_units += delta * units_per_second`. **They are different mechanisms that
|
||||
agree at exactly one frame rate: 60 Hz** — which is the only rate the console
|
||||
ever asked the game to be right at.
|
||||
|
||||
🔴 **Do not make the port frame-based to match the game.** A time-based port
|
||||
reproduces a 60 Hz console on hardware that is not 60 Hz; a frame-based one would
|
||||
drift on every machine that is not — and this port has measured *itself* between
|
||||
**9.7 and 69.4 fps** depending on the renderer. Matching the game's mechanism
|
||||
would import a fragility the game never had to survive, because the game only
|
||||
ever ran on one box.
|
||||
|
||||
## 🔴 But it sharpens what `60` is claiming, and makes it falsifiable
|
||||
|
||||
If units/second **is** the present rate, then `keyframe_units_per_second = 60` is
|
||||
no longer "the unit is 1/60 s". It is:
|
||||
|
||||
> **the game presented these screens at 60 Hz on the console.**
|
||||
|
||||
That is a harder claim and a checkable one. **It is also supported for the first
|
||||
time:** Canary unlimited presents at 51–55 Hz and the splash dwell is
|
||||
4.30 / 4.60 / 4.37 s over three cold boots. A natively 30 Hz game would present
|
||||
at ~30 in Canary too — the `--framerate_limit` run proves it, since forcing 30
|
||||
made that same splash take 8.45 s. **It does not take 8.45 s unforced.**
|
||||
|
||||
⚠️ Still `authored`, not promoted to `measured`: this is inference over three
|
||||
measurements rather than a measurement of units per second. It becomes `measured`
|
||||
when someone reads the console's present rate for these screens directly.
|
||||
|
||||
## And it closes the constant as a cause of finding 3 — in the direction that matters
|
||||
|
||||
| console rate | units/s | plate `t=236` |
|
||||
|---|---|---|
|
||||
| 30 Hz | 30 | **7.87 s** |
|
||||
| **60 Hz (shipping)** | **60** | **3.93 s** |
|
||||
|
||||
Under the frame-based model the only alternative is 30 Hz, and it puts the plate
|
||||
**later**, not earlier. **There is no console present rate that makes the plate
|
||||
arrive sooner than this port already shows it.** The human reported it arriving
|
||||
late; no value of this constant can produce that.
|
||||
|
||||
## The method note, and it is theirs
|
||||
|
||||
> *Four of my positions on this number were inference over a measured quantity;
|
||||
> this one changed an input and watched what moved.*
|
||||
|
||||
The opportunistic comparison — two captures that happened to differ — pointed
|
||||
**exactly the wrong way**, because nothing controlled what else differed between
|
||||
them. One designed capture settled it against its author's expectation. That is
|
||||
the difference between an observation and an experiment, and it cost this pair
|
||||
five positions in a day to relearn.
|
||||
|
||||
Reference in New Issue
Block a user