sylpheed-port's BLOCKED row asks for a second value on one outgoing screen --
what would make "the gap tracks the outgoing screen" predictive rather than a
restatement of the data.
First, a correction their ask surfaced without needing a run: THE MENU ALREADY
HAD TWO VALUES AND THEY DIFFER -- 0 leaving for the title, 1 leaving for EXTRAS.
So "the outgoing screen determines the gap" was too strong and is withdrawn; what
holds is an ordering, not a determination. Also recorded: their ask is answerable
only from the menu, since the title's sole exit is (A) to the menu and EXTRAS's
sole exit is (B) to the menu.
Then took a third menu-outgoing measurement, to a screen outside GP_TITLE.
Confound named in advance rather than after: that transition leaves the ARCHIVE,
so a pak load could inflate the gap for reasons unrelated to the outgoing screen.
Result: outgoing quad rises across frames 24-28 (4-5 frames, matching build 5's
declared 10-unit close), then ONE empty frame at 30. Gap = 1, identical to
menu -> EXTRAS. So the confound is measured ABSENT -- leaving the archive costs no
extra black, which is worth having on its own.
Six transitions now group as: menu {0, 1, 1} over three different destinations
including another pak, EXTRAS {2}, title {3, 3, 3}. The ordering rests on 3+1+3
measurements and the menu's three agree to within one frame.
Still not predictive: outgoing closes are 5, 5, 4 frames against gaps {0,1}, {2},
{3}, and EXTRAS has n=1 with no way to obtain a second value.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
214 lines
13 KiB
Plaintext
214 lines
13 KiB
Plaintext
# FOUR screen changes, per frame, from the running game. 2026-08-30.
|
|
# tools/re-capture/fade_decompose.sh (WHERE=menu | title | extras)
|
|
#
|
|
# Captures 2 and 4 are the SAME transition, title -> menu via (A), run twice.
|
|
# They are the hold-vs-load test: a load varies with cache and contention,
|
|
# a deterministic hold does not. The pair carries its own control -- the
|
|
# press-to-first-change latency DIFFERS by ~12 frames between the two runs,
|
|
# so conditions demonstrably were not identical, while the black gap is
|
|
# exactly 3 frames in both.
|
|
#
|
|
# quantity run 1 (cap 2) run 2 (cap 4)
|
|
# outgoing quad rise 67-70: 63,127,191,255 64-67: 63,127,191,255
|
|
# frames black ([255] alone) 70,71,72 = 3 67,68,69 = 3
|
|
# incoming appears frame 73 frame 70
|
|
# incoming decay 255,-,127,84,63 255,169,127,84,42
|
|
# press -> first change ~25 frames ~10 frames
|
|
|
|
############ CAPTURE 1 -- menu -> title, via (B) ############
|
|
frame untextured full-screen textured (distinct) draws tex
|
|
28 [64] [142, 146, 192, 255] 12 10
|
|
29 [64] [143, 146, 192, 255] 12 10
|
|
30 [64] [143, 147, 192, 255] 12 10
|
|
31 [64] [143, 147, 192, 255] 12 10
|
|
32 [64] [144, 148, 192, 255] 12 10
|
|
34 [64, 255, 64] [144, 148, 169, 191, 254, 255] 15 12
|
|
35 [64, 223, 64] [84, 143, 145, 149, 191, 255] 15 12
|
|
36 [64, 207, 64] [42, 119, 145, 149, 159, 255] 15 12
|
|
37 [64, 175, 64] [71, 95, 145, 149, 191, 255] 14 11
|
|
39 [64, 95, 64] [146, 150, 255] 11 8
|
|
40 [64, 31, 64, 102] [146, 151, 255] 12 6
|
|
41 [64, 15, 64, 127] [146, 151, 255] 12 6
|
|
43 [64, 64, 255] [147, 152, 255] 12 6
|
|
44 [64, 64, 255] [147, 152, 255] 12 6
|
|
45 [64, 64, 255] [148, 152, 255] 12 6
|
|
46 [64] [255] 6 2
|
|
47 [64] [32, 255] 8 6
|
|
49 [64] [32, 96, 255] 8 6
|
|
50 [64] [48, 128, 255] 8 6
|
|
|
|
############ CAPTURE 2 -- title -> menu, via (A), run 1 ############
|
|
frame untextured full-screen textured (distinct) draws tex
|
|
60 [] [42, 50, 55, 84, 255] 9 8
|
|
61 [] [16, 18, 255] 8 7
|
|
62 [] [235, 255] 7 6
|
|
63 [] [196, 255] 7 6
|
|
64 [] [156, 255] 7 6
|
|
65 [] [117, 255] 7 6
|
|
66 [] [78, 255] 7 6
|
|
67 [63] [19, 255] 8 4
|
|
68 [127] [255] 6 2
|
|
69 [191] [255] 6 2
|
|
70 [255] [255] 6 2
|
|
71 [255] [255] 6 2
|
|
72 [255] [255] 6 2
|
|
73 [64, 255] [255] 7 3
|
|
75 [64, 127] [2, 252, 255] 7 3
|
|
76 [64, 84] [3, 251, 255] 7 3
|
|
77 [64, 63] [3, 251, 255] 7 3
|
|
78 [64] [5, 249, 255] 7 3
|
|
79 [64] [5, 249, 255] 7 3
|
|
80 [64] [7, 32, 247, 255] 8 6
|
|
81 [64] [8, 96, 246, 255] 8 6
|
|
82 [64] [8, 160, 246, 255] 8 6
|
|
|
|
############ CAPTURE 3 -- EXTRAS -> menu, via (B) ############
|
|
frame untextured full-screen textured (distinct) draws tex
|
|
28 [64] [128, 171, 181, 255] 11 9
|
|
29 [64] [128, 172, 182, 255] 11 9
|
|
30 [64] [111, 127, 172, 182, 185, 255] 11 9
|
|
31 [64] [42, 79, 139, 172, 183, 223, 255] 11 9
|
|
32 [64] [31, 69, 127, 173, 183, 255] 10 8
|
|
33 [64] [31, 173, 184, 255] 9 7
|
|
34 [64, 51] [174, 184, 255] 8 4
|
|
35 [64, 102] [174, 184, 255] 8 4
|
|
36 [64, 178] [174, 185, 255] 8 4
|
|
37 [64, 229] [174, 185, 255] 8 4
|
|
38 [64, 255] [175, 186, 255] 8 4
|
|
39 [] [] 3 0
|
|
40 [] [] 3 0
|
|
41 [64, 169] [1, 253, 255] 7 3
|
|
42 [64, 148] [2, 252, 255] 7 3
|
|
43 [64, 106] [2, 252, 255] 7 3
|
|
44 [64, 63] [3, 251, 255] 7 3
|
|
45 [64, 21] [4, 250, 255] 7 3
|
|
46 [64] [5, 249, 255] 7 3
|
|
47 [64] [6, 248, 255] 7 3
|
|
48 [64] [7, 32, 247, 255] 8 6
|
|
49 [64] [8, 96, 246, 255] 8 6
|
|
50 [64] [9, 192, 245, 255] 8 6
|
|
|
|
############ CAPTURE 4 -- title -> menu, via (A), run 2 ############
|
|
frame untextured full-screen textured (distinct) draws tex
|
|
61 [] [137, 255] 7 6
|
|
62 [] [98, 255] 7 6
|
|
63 [] [78, 255] 7 6
|
|
64 [63] [19, 255] 8 4
|
|
65 [127] [255] 6 2
|
|
66 [191] [255] 6 2
|
|
67 [255] [255] 6 2
|
|
68 [255] [255] 6 2
|
|
69 [255] [255] 6 2
|
|
70 [64, 255] [255] 7 3
|
|
71 [64, 169] [1, 253, 255] 7 3
|
|
72 [64, 127] [2, 252, 255] 7 3
|
|
73 [64, 84] [3, 251, 255] 7 3
|
|
74 [64, 42] [4, 250, 255] 7 3
|
|
75 [64] [5, 249, 255] 7 3
|
|
76 [64] [6, 248, 255] 7 3
|
|
77 [64] [7, 32, 247, 255] 8 6
|
|
78 [64] [8, 96, 246, 255] 8 6
|
|
79 [64] [9, 192, 245, 255] 8 6
|
|
80 [64] [10, 244, 255] 8 6
|
|
|
|
################################################################################
|
|
# A THIRD title -> menu REPLICATE, 2026-08-30 -- from a run that executed the
|
|
# WRONG EXPERIMENT. The script was invoked as WHERE=menu2extras but a condition
|
|
# edit had silently failed to apply, so it took the `title` branch instead. The
|
|
# capture is well-formed and is of a different transition than intended -- the
|
|
# same shape as the build-ordinal error, caught only because the log lacked the
|
|
# navigation lines the intended branch prints.
|
|
#
|
|
# run outgoing ramp black frames incoming decay
|
|
# 1 (fadecap2) 67-70: 63,127,191,255 70,71,72 = 3 73-77
|
|
# 2 (fadecap4) 64-67: 63,127,191,255 67,68,69 = 3 70-74
|
|
# 3 (m2e) 92-95: 63,127,191,255 95,96,97 = 3 98-103
|
|
#
|
|
# ✅ THREE INDEPENDENT RUNS, gap = 3 frames every time, and the outgoing ramp is
|
|
# byte-identical in all three (63, 127, 191, 255 -- steps of exactly 64). That
|
|
# strengthens "the black gap is not a load" from two replicates to three, and the
|
|
# ramp's exactness across runs makes the 4-frame outgoing duration as solid as
|
|
# anything measured here.
|
|
#
|
|
# 🟡 STILL OPEN: menu -> EXTRAS, the reverse of the pair measured at a 2-frame
|
|
# gap. The instrument is fixed (WHERE=menu2extras now reaches its branch) and the
|
|
# run has not been taken.
|
|
|
|
################################################################################
|
|
# FIFTH TRANSITION: menu -> EXTRAS via (A). 2026-08-30.
|
|
# The reverse of the pair already measured at a 2-frame gap, taken to test whether
|
|
# the black gap is a property of the screen PAIR or of the DIRECTION.
|
|
#
|
|
# Navigation verified both ways before arming: extras margin 11.23, back on the
|
|
# menu margin 11.60, against the discriminator's 9.9-11.7 control band. And the
|
|
# run announced its effective configuration -- "branch taken = menu2extras: back
|
|
# on the MENU with focus restored -> press (A)" -- which is the guard added after
|
|
# the previous run silently took the wrong branch.
|
|
#
|
|
# frames 42-46 outgoing quad 51, 102, 153, [45 absent], 255 -- 5 frames,
|
|
# matching build 5's declared close of 10 units = 5 frames
|
|
# frame 49 EMPTY: 3 draws, 0 textured
|
|
# frames 51+ EXTRAS building
|
|
#
|
|
# ⚠️ Frames 48 and 50 carry no `--- frame` header at all, so the gap is ONE logged
|
|
# empty frame with two unlogged neighbours. Quoted as 1, not silently rounded to 3.
|
|
#
|
|
################################################################################
|
|
# ALL FIVE, ORDERED BY OUTGOING SCREEN -- which is the first thing that orders them
|
|
#
|
|
# transition black gap outgoing outgoing close (disc)
|
|
# menu -> title (B) 0 menu (build 5) 10 units = 5 frames
|
|
# menu -> EXTRAS (A) 1 menu (build 5) 10 units = 5 frames
|
|
# EXTRAS -> menu (B) 2 EXTRAS (build 6) 10 units = 5 frames
|
|
# title -> menu (A) x3 3, 3, 3 title (build 4) 8 units = 4 frames
|
|
#
|
|
# 🟡 THE GAP TRACKS THE OUTGOING SCREEN, not the direction and not the button: the
|
|
# two transitions leaving the MENU give 0 and 1, the one leaving EXTRAS gives 2,
|
|
# and the three leaving the TITLE give 3 every time. Direction is ruled out --
|
|
# EXTRAS->menu (2) and menu->EXTRAS (1) are the same pair in both directions and
|
|
# differ; button is ruled out -- (B) gives 0 and 2, (A) gives 1 and 3.
|
|
#
|
|
# 🔴 BUT THAT IS NOT YET A RULE. With three outgoing screens and one value each
|
|
# (bar the title's three), "each outgoing screen has its own gap" only restates
|
|
# the data; a rule would PREDICT. And nothing declared does: the outgoing close is
|
|
# 5, 5, 5, 4 frames against gaps 0/1, 2, 3 -- if anything inverted, on three
|
|
# points. Recorded as a narrowing of WHERE to look, not as a rule.
|
|
|
|
################################################################################
|
|
# SIXTH TRANSITION: menu -> a screen OUTSIDE GP_TITLE, via (A). 2026-08-30.
|
|
#
|
|
# Taken because sylpheed-port's BLOCKED row asks for a SECOND VALUE ON ONE
|
|
# OUTGOING SCREEN -- the thing that would make "the gap tracks the outgoing
|
|
# screen" predictive rather than a restatement. ⚠️ The menu is the only screen in
|
|
# GP_TITLE that can supply it: the title's sole exit is (A) to the menu and
|
|
# EXTRAS's sole exit is (B) to the menu, so neither has a second destination.
|
|
#
|
|
# ⚠️ CONFOUND NAMED IN ADVANCE, before the result was seen: this transition leaves
|
|
# the ARCHIVE, so a pak load could inflate the gap for reasons having nothing to
|
|
# do with the outgoing screen.
|
|
#
|
|
# frames 4-21 menu settled ([64] = pteff02.prm)
|
|
# frames 24-28 outgoing quad 25, 127, 255 -- 4-5 frames, matching build 5's
|
|
# declared close of 10 units = 5 frames
|
|
# frame 30 EMPTY: 3 draws, 0 textured
|
|
# frames 32+ the new screen builds ([127] primitive, not the menu's [64])
|
|
#
|
|
# ✅ GAP = 1, the same as menu -> EXTRAS. So the confound is MEASURED ABSENT:
|
|
# leaving the archive costs no extra black. That is worth having on its own.
|
|
#
|
|
################################################################################
|
|
# SIX TRANSITIONS, GROUPED BY OUTGOING SCREEN
|
|
#
|
|
# outgoing screen gaps n
|
|
# menu (build 5) 0, 1, 1 3 -> title, -> EXTRAS, -> another archive
|
|
# EXTRAS (build 6) 2 1 -> menu
|
|
# title (build 4) 3, 3, 3 3 -> menu (three runs)
|
|
#
|
|
# 🟡 The ordering menu {0,1} < EXTRAS {2} < title {3} now rests on 3 + 1 + 3
|
|
# measurements rather than 2 + 1 + 3, and the menu's three values agree to within
|
|
# ONE frame across three different destinations, one of them in another pak.
|
|
#
|
|
# 🔴 Still not predictive. Nothing declared separates 0/1 from 2 from 3: the
|
|
# outgoing closes are 5, 5, 4 frames for menu, EXTRAS, title against gaps of
|
|
# {0,1}, {2}, {3}. And EXTRAS still has n=1 with no way to get a second value.
|