Their ARM=early disclosure (~40% silent trigger loss) makes every draw-stream figure n=1. Exactly one port constant depends on one: the black hold. Three of its supports have moved -- the 105-frame count they revised to 114, the 2.231 corroboration they retracted, and a run-average rate now known to drift 33%. Redone on their corrected segments the two runs give 8.95 and 6.71 units, not one number: overlapping +/-1 error bars are not agreeing central values when one frame is a third of the quantity. Range ~6.5-9.2, port at the top. Value UNCHANGED and proposed rather than adopted -- it would be my arithmetic on their instrument. Filed with the single run that would settle it. Also checks their statistics: per-boot excesses reproduce exactly, and their 2.3 sigma uses population SD where sample SD gives 1.89 -- cutting against their own concession. Neither framing reaches significance. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
223 lines
12 KiB
JSON
223 lines
12 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.",
|
|
"",
|
|
"🔴 DO NOT 'CORRECT' THIS AGAINST AN EMULATOR FRAME RATE. A draw-stream",
|
|
"measurement on 2026-08-29 found the presented units-per-frame rising 33 % over",
|
|
"a single boot (1.765 early, 2.357 late) and three independent readings of one",
|
|
"container's rate disagreeing with each other. That is the EMULATOR's",
|
|
"presentation pacing drifting, and no single units-per-frame figure describes a",
|
|
"run there.",
|
|
"",
|
|
"60 is a different quantity: the GAME's logical unit rate, measured off the",
|
|
"running game as HANDOFF Q1 (a declared t=30 landing on the linear value at",
|
|
"every one of seven sampled frames). The port renders at its own frame rate and",
|
|
"converts through this constant, so guest pacing cannot reach it. The two",
|
|
"numbers are not comparable and one is not evidence about the other."
|
|
],
|
|
"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 -- because the dwell is DECLARED, and the port already plays it.",
|
|
"",
|
|
"This key has now been wrong in two opposite directions, and the second was",
|
|
"mine, so both are recorded.",
|
|
"",
|
|
"It first said 'a screen's dwell is its OWN keyframe group'. Then GP_TITLE",
|
|
"build 4 was measured dwelling ~1100 presented frames against a declared ~120,",
|
|
"and I generalised that into 'the boot is KNOWN TOO FAST on both splashes'.",
|
|
"🔴 THAT WAS AN OVER-CORRECTION and it is withdrawn. Build 4 is the title: its",
|
|
"exit is caused by something outside its timeline, so it holds. A splash's exit",
|
|
"is caused by nothing, so it plays its declared timeline and leaves. The title",
|
|
"is the exception, not the rule, and one screen was never enough to overturn",
|
|
"the other two.",
|
|
"",
|
|
"MEASURED 2026-08-29 by the Decoder over 3 cold boots",
|
|
"(docs/re/structures/boot-splash-dwells-are-declared.md):",
|
|
"",
|
|
" publisher declared t=0..255 = 4.250 s corpus 4.30 / 4.60 / 4.37",
|
|
" developer declared t=0..210 = 3.500 s corpus 3.51 / 3.50 / 3.37",
|
|
"",
|
|
"The developer agrees to 1.1 %, two of its three runs to 0.3 %. The port emits",
|
|
"4.400 s and 3.650 s -- each declared value plus the 9-unit black hold, exactly.",
|
|
"So the pacing was right all along and nothing changes in the code.",
|
|
"",
|
|
"🔴 AND THE UNIT STAYS UNITS, NOT SECONDS. The same two dwells timed in the",
|
|
"Decoder's own container came out 15-20 % LONGER than both the declared values",
|
|
"and the corpus -- same disc, same timeline -- and three independent readings",
|
|
"of that container's rate disagree with each other. A seconds figure records",
|
|
"one emulator's pacing on one run. The units are on the disc. If anything ever",
|
|
"goes in `dwell` it is an extra hold in UNITS, and only for a screen that is",
|
|
"measured to wait beyond its group."
|
|
],
|
|
"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 — and 🟡 SOFTER THAN IT LOOKS. Read the",
|
|
"audit below before quoting it. The VALUE IS UNCHANGED because changing it",
|
|
"would be my arithmetic on somebody else's instrument; the change is what may",
|
|
"be claimed for it.",
|
|
"",
|
|
"AUDIT 2026-08-29, prompted by the Decoder disclosing that `ARM=early` silently",
|
|
"loses its trigger ~40 % of the time, so their draw-stream runs are n = 1 each.",
|
|
"Three things this constant rests on have moved since it was authored:",
|
|
"",
|
|
"1. 🔴 THE CONVERSION USED A FRAME COUNT THEY HAVE SINCE CORRECTED. 9 came from",
|
|
" 2.284 units/frame = `palogo_sqex`'s declared span over 105 drawn frames.",
|
|
" Their batched-draw truncation fix revised that span to frames 6…119 = 114,",
|
|
" which gives 2.096 — the same declared 239 units over 9 more frames.",
|
|
"2. 🔴 ITS SECOND CORROBORATION WAS WITHDRAWN. '2.231 from the title capture'",
|
|
" is the figure behind their retracted 114-unit plate period: it was",
|
|
" regressed over the build-in, where the top-level clock advances, and does",
|
|
" not describe the transition.",
|
|
"3. 🔴 NO SINGLE UNITS-PER-FRAME FIGURE DESCRIBES A RUN. The presented rate",
|
|
" rises 33 % across one boot (1.765 → 2.357). A run-average conversion is",
|
|
" the wrong shape for a 3-4 frame event; the LOCAL rate is what applies.",
|
|
"",
|
|
"Redone with their corrected segments (publisher-late 2.165, developer-early",
|
|
"2.308 bracket the gap):",
|
|
"",
|
|
" 4-frame gap (their 1st run) -> 8.66 - 9.23 units (mid 8.95)",
|
|
" 3-frame gap (their 2nd run) -> 6.50 - 6.92 units (mid 6.71)",
|
|
"",
|
|
"⚠️ Those two runs were reconciled as 'the 3-frame gap replicates the 4-frame",
|
|
"one within the ±1 both are quantised to, so ~9 stands'. OVERLAPPING ERROR BARS",
|
|
"ARE NOT AGREEING CENTRAL VALUES: one frame is a third of this quantity, and",
|
|
"the midpoints are 8.95 and 6.71. The honest range is ~6.5-9.2 units and the",
|
|
"port sits at the TOP of it.",
|
|
"",
|
|
"What is NOT in doubt, and is why 9 is still better than what preceded it: the",
|
|
"hold is REAL and was missing entirely until 2026-08-29. Filmed at 0.05 s the",
|
|
"port had NO BLACK FRAME AT ALL where the oracle measures a plateau. A value",
|
|
"at the top of a plausible range beats a fifth of a second of missing black.",
|
|
"",
|
|
"Both boundary frames still carry picture — alpha 7 and 34 — and are counted as",
|
|
"black, so the true hold is shorter than whatever number this lands on.",
|
|
"",
|
|
"PRIOR REASONING, kept: the draw stream beats luminance here because luminance",
|
|
"cannot separate the outgoing fade's tail from true black. It disagrees with",
|
|
"HANDOFF Q7's 0.17-0.23 s plateau (12 units), which is a different screen's",
|
|
"transition quad on a different path -- the boot splashes carry none, since",
|
|
"`palogo_eff0` is one static keyframe. A number that fits by analogy loses to",
|
|
"one measured in place, and that reasoning survives this audit intact.",
|
|
"",
|
|
"Delete this the day a screen's own transition quad supplies it on the boot",
|
|
"path too."
|
|
]
|
|
}
|