Files
Sylpheed/authored/timing.json
Sylpheed port agent 7c918006e8 port: the PRESS (A) plate pulses -- authored per element, because 82 of 212 share its shape
The human listed pulsation as first-class and the port drew nothing: the plate's
focus record `ptbtn00f` was never reached, because press_start has no `buttons`
and nothing is focused. That it LOOPS is measured -- the corpus timed the period
four times (2.12 / 2.19 / 2.34 / 2.31 s) and you cannot measure a period unless
the thing repeats.

THE RULE I WAS GOING TO WRITE DIED IN THE CENSUS. The spinning ring is a rule in
the renderer because it has a disc-wide check: 16 of 212 elements match its shape
and all 16 are focus rings. The analogous shape for a pulse -- keyframes varying
only in alpha, first alpha equal to last -- matches 82 OF 212, including
ptcopyright, palogo_sqex, ptmsg and every _eff fade. A renderer rule on it would
make the copyright notice pulse. Narrowed to focus records it matches exactly one
distinct element, and a rule justified by n=1 is a special case wearing a rule's
clothes.

So it is a LOOKUP in authored/timing.json keyed <screen>/<element>, with the
census recorded beside it so nobody widens it later.

The period is 129 units -- the element's own group under the port's existing
model: last timed keyframe t=105 plus the authored exit_ramp_units of 24. No new
constant. 2.150 s at 60 units/s, 2.295 s at the ~28.1 fps the emulator presents,
against measurements of 2.12-2.34.

IT IS A CHOICE AND THE ALTERNATIVE IS STATED: restarting at the group's first
keyframe (t=6) instead of 0 gives 123 units = 2.050 / 2.189 s, also inside the
measured spread. Nothing separates them. t=0 is taken because it is where every
other group starts -- consistency, not evidence.

Verified the way the ring was, by bit-identity one period apart. 20 periods is
43.00 s = exactly 172 film frames: frames N and N+172 differ by 0-1/255, while
the control a quarter-second off (43.25 s) differs by 58.7/255. On the held boot
title the glow-box mean swings 26.0 <-> 37.7.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
2026-08-29 16:51:36 +00:00

117 lines
6.0 KiB
JSON

{
"format": "sylpheed.timing/1",
"keyframe_units_per_second": 60,
"why": [
"HANDOFF Q1. The disc says a keyframe is at `t=30`; it does not say what a",
"`t` is. The unit was MEASURED off the running game, not decoded: a declared",
"15-unit fade lands on round(255*k/15) for all seven of its samples with k",
"stepping 2,4,6,8,10,12,14 on seven consecutive submitted frames -- so 2",
"units per rendered frame -- and the idle title presents at 28.3-28.8 fps,",
"a 30 Hz game, giving 60 units per second. A second line agrees: the",
"transition quad is declared black for 12 units, and a capture measured the",
"pure-black plateau at 0.17-0.23 s, where 12/60 = 0.20 s.",
"",
"Expressed as units-per-second rather than seconds-per-unit so the value is",
"exact rather than a repeating decimal a reader has to recognise.",
"",
"DELETE THIS FILE when a field on the disc is found that states the unit.",
"Nothing here is on the disc."
],
"kind": "measured",
"source": "/reborn docs/port/HANDOFF.md Q1, docs/re/ui-keyframe-time-unit.md",
"ramp": "linear",
"ramp_why": [
"Also HANDOFF Q1, and part of the same measurement: the fade lands on the",
"linear value at every one of the seven sampled frames, so there is no ease."
],
"exit_ramp_seconds": 0.4,
"exit_ramp_why": [
"HANDOFF Q7 + the RE agent's 2026-08-29 answer. MEASURED, not on the disc.",
"",
"Every element of a screen ends on exactly ONE untimed keyframe, so there is",
"exactly one unknown duration per screen -- the ramp INTO that final keyframe.",
"This is that duration. ~0.4 s, which is 24 units at 60 units/s.",
"",
"The alternative readings were tested and refuted. It is not a black quad laid",
"over a frozen screen: under that model a black rect scales every region by the",
"same 1-alpha, so the button-region / background-region brightness RATIO would",
"be constant through the fade. Measured on the RE agent's filmstrip it falls",
"6.495 -> 5.574 -> 3.105 -> 2.125 -> 1.935, a 3.4x monotonic drop. The screen",
"itself plays out: pteff00.prm ramps to opaque black while the button labels,",
"ptmsg, pteff10 and pteff12 all ramp to transparent, and ptframe1/2 hold.",
"",
"REACH, quoted from the RE agent rather than smoothed over: the filmstrip is",
"downsampled and the button region contains some background, so this pins the",
"DIRECTION, not 0.4 s to +/-0.05 s, and it is one transition pair. Treat the",
"number as approximate and the model as established."
],
"exit_ramp_units": 24,
"dwell_seconds": null,
"dwell_why": [
"NOT SET, and not needed. A screen's dwell is its OWN keyframe group: the",
"publisher wordmark reaches its hold at t=235 (3.92 s) and the developer logos",
"at t=190 (3.17 s), both read from the disc. Adding a hold on top of that would",
"be inventing a number nobody measured, so the sequencer holds for zero extra",
"time and the pacing you see is the disc's own.",
"",
"If a capture ever times the real boot, this is where that number goes."
],
"looping_focus_records": {
"_": [
"WHICH focus records the port draws unconditionally, and loops. CHOSEN, and",
"deliberately a LOOKUP rather than a rule -- delete an entry the day the disc",
"or a capture states it.",
"",
"THE PRESS (A) PLATE GLOWS AND PULSES. Measured on the running game:",
"`ptbtn00f`, the plate's focus record, ramps alpha 0x00->0x50 and back, and",
"its period was timed four times at 2.12 / 2.19 / 2.34 / 2.31 s. You cannot",
"measure a period unless the thing repeats, so THAT IT LOOPS IS MEASURED. The",
"port drew nothing at all here, because press_start has no `buttons` and",
"nothing is focused.",
"",
"WHY A LOOKUP AND NOT A RULE, which is the part worth keeping. The spinning",
"ring is a RULE in the renderer (`spin_period_units`) because it has a",
"disc-wide check: 16 of 212 elements match its shape and all 16 are focus",
"rings, zero false positives. The obvious rule for a pulse -- a group whose",
"keyframes vary only in alpha and whose first and last alpha are equal -- was",
"CENSUSED BEFORE BEING WRITTEN and it fails: 82 OF 212 ELEMENTS MATCH,",
"including ptcopyright, palogo_sqex, ptmsg and every _eff fade-in. A renderer",
"rule on that shape would make the copyright notice pulse.",
"",
"Narrowing to focus records leaves exactly ONE distinct element (ptbtn00f,",
"plus its JP twin), and a rule justified by n=1 is a special case wearing a",
"rule's clothes. So it is written here, per element, by name."
],
"press_start/ptbtn00": {
"record_element": "ptbtn00f",
"period_units": 129,
"kind": "chosen",
"why": [
"129 units = the element's own group under the port's existing timing model:",
"its last timed keyframe is t=105 and the final untimed keyframe is reached",
"`exit_ramp_units` (24) later. NO NEW CONSTANT is introduced -- 24 is the",
"same authored value every other element's exit already uses.",
"",
"129 units is 2.150 s at 60 units/s, and 2.295 s at the ~28.1 fps that",
"emulator presents (56.2 units/s), against measurements of 2.12 / 2.19 /",
"2.34 / 2.31 s. It sits inside that spread at either rate.",
"",
"IT IS A CHOICE, and here is the alternative the data CANNOT rule out: the",
"cycle could restart at the group's first keyframe (t=6) rather than at 0,",
"giving 123 units = 2.050 s / 2.189 s at emulator rate. That ALSO sits",
"inside the measured spread. Nothing available separates them, so t=0 is",
"taken because it is where every other group in this port starts -- which is",
"consistency, not evidence.",
"",
"A fifth reading exists and is NOT averaged in: the Decoder re-picked its",
"troughs and got 2.628 s, having previously reported 2.369 from the same",
"run. It withdrew the estimate as too weak to resolve better than ~7%, so it",
"is recorded here and not used.",
"",
"WHAT DELETES THIS ENTRY: a capture that times the pulse against a landmark",
"in the same frame, or a loop flag decoded on the disc."
]
}
}
}