Files
Sylpheed/authored/timing.json
Sylpheed port agent 39209eab05 port: the title's sweeps loop, the black hold is 9 units, and one claim refuted
THREE THINGS FROM THE DECODER, one of which I am not taking.

REFUTED: "the developer splash is one composited quad, the bounding box of the
three logos". The observed quad is 525x259 at (378,155). The three logos'
bounding box is 500x421 at (390,164) -- a 259-tall quad CANNOT contain them, and
palogo_anima alone starts at y=449, thirty-five pixels below that quad's bottom
edge. The observed quad matches the union of gamearts_eff and seta_eff, 521x261
at (379,154), to about four pixels in every dimension -- and both of those are
TRANSIENTS my own census flagged, dark by t=45, so a frame containing that quad
is a build-in frame rather than the settled screen. I cannot see their draw
stream, so I sent the arithmetic rather than a verdict, and the port keeps
drawing three: I will not stop drawing an element on a claim whose stated
identification excludes that element from its own bounding box.

THE BLACK HOLD IS 9 UNITS, NOT 12. I authored 12 from Q7's luminance plateau of
0.17-0.23 s, supported by the menus' transition quad. The Decoder counted
SUBMITTED QUADS instead -- luminance cannot separate the outgoing fade's tail
from true black. Four frames with no sprite quad at all, at 2.284 units/frame
derived from the disc as its own clock, gives 9.1 units = 0.152 s (6.9-11.4).
That overlaps the luminance figure only at the top, and the true black is SHORTER
still since both boundary frames carry picture. My 12 was supported by analogy --
a different screen's quad on a different path -- and a number that fits by
analogy loses to one measured in place. verify-dwell's bound moved with it; both
screens still agree.

THE TITLE'S SWEEPS LOOP. The oracle shows the quad oscillating over its whole x
range and resetting hard, one reset in the first title dwell and two in the
second. The loop-length field could NOT have settled it, correcting a hope I had
stated: both records declare exactly their last keyframe time, slack zero, and
"loops at 600" and "runs once for 600 and stops" write the identical header.
Verified on the two sweeps' LCM, since their periods differ: 600 and 720 realign
at 3600 units, mean diff 0, against 0.438 at half that.

Scoped to the title. The menus declare the same lengths but the oracle
measurement is of the title, and my own weak evidence points the other way there
-- best match with the sweeps off-screen, three times worse mid-screen, against a
73% on-screen duty cycle if they looped. Two weak signals in opposite directions
is a reason to scope, not to pick.

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

190 lines
10 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."
],
"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": 120,
"kind": "chosen",
"why": [
"120 units, and it is DECODED rather than chosen -- but it is still written",
"here because the field is not in the pinned crate yet. DELETE THIS the day a",
"tag exposes it and the exporter can emit it.",
"",
"A nested record is itself a RATC bundle with its own header, and that header's",
"+0x08 IS THE LOOP LENGTH -- the same field `ui_header_time_disc` already tests",
"as an animation length at the top level. A record's keyframes need not fill",
"it, and the slack is a hold at the final pose. `ptbtn00f` is 105 UNITS OF RAMP",
"INSIDE A 120-UNIT CYCLE, so the glow rests dark for 15 units before repeating.",
"The five `ptbtn0Nf` records on the main menu fill their 120 exactly, which is",
"what shows the slack belongs to this record and not to the format.",
"",
"Disc-wide over 1781 timed nested records: 92.3% declare exactly their last",
"keyframe time, 7.7% declare more, and 0 DECLARE LESS. That last row is the",
"falsifier -- a cycle cannot restart before its own last pose -- and it never",
"fires.",
"",
"AND IT SURVIVES THE OBJECTION THIS ENTRY RAISED, using THIS PORT's number.",
"Both candidate periods need the same emulator pacing factor, and the ring",
"measures it independently: declared 120 units -> 2.177 s = 1.0885.",
"",
" 105 units = 1.750 s nominal, needs a factor of 1.211-1.337 -> EXCLUDES it",
" 120 units = 2.000 s nominal, needs a factor of 1.060-1.170 -> CONTAINS it",
"",
"So 105 cannot reach the corpus's measured 2.12-2.34 s under any pacing the",
"ring also satisfies. At 120 the prediction is 2.177 s. Different elements,",
"different bundles, separate runs, tied only by both declaring 120.",
"",
"HISTORY, because the sequence is what makes this checkable: this entry read",
"129 (last keyframe 105 + the since-deleted exit_ramp_units), then 105 (the",
"group length under the corrected layout, which I shipped knowing it was 17%",
"short of every measurement). The 123-vs-129 pair I once called unseparable",
"STRADDLED the right answer without containing it.",
"",
"The ~3% between 2.177 and the corpus's 2.24 mean is four wall-clock samples of",
"a 2 s period; the Decoder looked for a further declared hold and found none."
]
}
},
"exit_ramp_deleted_why": [
"DELETED 2026-08-29, and the deletion is the point.",
"",
"`exit_ramp_seconds` (~0.4 s) and `exit_ramp_units` (24) were AUTHORED because",
"the disc had no time slot on a group's final keyframe, so the ramp into it was",
"the one unknown duration per screen. Under the corrected record layout",
"(formats-pin-2026-08-29c onward) there IS no untimed keyframe -- a group is an",
"8-byte header then frames x {u32 time; 36-byte pose}, so every pose is timed",
"including the last. The unknown the constant stood in for does not exist.",
"",
"MISSION section 3: 'When the RE agent later decodes something you had",
"authored, delete the authored entry and let the exporter emit it. That",
"deletion is the measure of progress.'",
"",
"VERIFIED DEAD BEFORE DELETING, not assumed: setting it to 9999 (166 seconds)",
"changed the boot's transitions by 0.04 s -- wall-clock jitter, not a 166 s",
"ramp. Both of its uses in ScreenView were gated on `not last_frame.has('t')`,",
"which no longer fires on any of the export's 866 keyframes.",
"",
"The measurement it recorded is not lost: HANDOFF Q7's ~0.4 s fade-out and the",
"0.17-0.23 s black hold are still measured facts, and the hold is still used --",
"`tools/port/verify-dwell` compares a transition INTERVAL against the oracle's",
"visible SPAN plus that hold. What is deleted is the port's need to invent a",
"duration the disc now states."
],
"black_hold_units": 9,
"black_hold_why": [
"MEASURED IN THE DRAW STREAM, 9 units. Not on the disc for these screens, so",
"it is authored with a why.",
"",
"The Decoder counted submitted quads rather than luminance, which is the better",
"instrument here: luminance cannot separate the outgoing fade's tail from true",
"black, and the draw stream can. Frames 21-125 submit `palogo_sqex` fading to",
"alpha 7; frames 126-129 submit NO SPRITE QUAD AT ALL; frames 130-153 fade the",
"developer splash in from alpha 34. Four presented frames, the only such run in",
"the sequence.",
"",
"Converted with the disc as its own clock, because that run's frame rate is",
"useless (13.1 fps against 28 elsewhere): `palogo_sqex` declares alpha >= 1 for",
"239.8 units and is drawn in 105 frames -> 2.284 units/frame, corroborated",
"independently at 2.231 by the title capture. Four frames = 9.1 units = 0.152 s,",
"with a +/-1 frame range of 6.9-11.4 units.",
"",
"⚠️ IT DISAGREES WITH THE LUMINANCE FIGURE AND THE DISAGREEMENT IS THE POINT.",
"HANDOFF Q7's pure-black plateau was measured at 0.17-0.23 s and I authored 12",
"units (0.200 s) from it. The draw-stream range is 0.114-0.190 s, overlapping",
"only at the top. And the true black is SHORTER than 9 even so: both boundary",
"frames still carry picture, at alpha 7 and 34, and are counted as black.",
"",
"12 was also supported by the menus' transition quad declaring black for 12",
"units -- but that is a different screen's quad on a different path, and the",
"boot splashes carry no such quad at all (`palogo_eff0` is one static",
"keyframe). A number that fits by analogy loses to one measured in place.",
"",
"🔴 It had never been implemented at ALL until 2026-08-29 -- see the entry",
"below, kept because the way it stayed hidden matters more than the value.",
"",
"PREVIOUS ENTRY, kept:",
"MEASURED, not on the disc for these screens, so it is authored with a why.",
"",
"HANDOFF Q7: a screen transition is a fade THROUGH BLACK, and the pure-black",
"plateau between one screen leaving and the next arriving was measured at",
"0.17-0.23 s. The transition quad on the menus declares black for 12 units, and",
"12/60 = 0.200 s sits in the middle of that range -- so 12 units is the number,",
"and it is the disc's own where a screen carries such a quad.",
"",
"THE BOOT SPLASHES DO NOT CARRY ONE. `publisher_logo` and `developer_logos`",
"each hold a single `palogo_eff0`, a 1280x720 primitive with ONE keyframe at",
"t=0 -- static, not a transition ramp. So on the boot path the hold is",
"sequencer behaviour and there is nothing to read it from.",
"",
"🔴 IT HAD NEVER BEEN IMPLEMENTED, and this is what the publisher_logo residual",
"was. Filmed at 0.05 s, the port fades the publisher out to a mean of 0.317 at",
"t=4.20 s and the developer logos are already at 5.65 by t=4.25 -- NO BLACK",
"FRAME AT ALL. The oracle measures a 0.17-0.23 s plateau there. I had recorded",
"the miss as '0.03 s, probably an artefact of the bound I composed', and the",
"Decoder agreed; we were both wrong. The bound was fine and the port was",
"missing a fifth of a second of black.",
"",
"Delete this the day a screen's own transition quad supplies it on the boot",
"path too."
]
}