From 1628f0e9b59aefb50bdb45b5bb9ec2892150e886 Mon Sep 17 00:00:00 2001 From: Sylpheed port agent Date: Wed, 2 Sep 2026 21:38:45 +0000 Subject: [PATCH] port: the snap target is UNDECODABLE and therefore free -- caveat closed, not carried I had this in the code as 'bounded, not pinned ... if the game snaps elsewhere in the window, move this line'. That framed a live loose end. There is none. The Decoder tightened the window to [160,238) and, more usefully, showed it can never be narrowed by any capture: every element holds a constant pose across it, so with the leaves restarting at 0 on the snap, every target in the window renders the same frame -- and it never becomes observable later either, because the clock freezes at settle and the 238->250 exit plays when the screen LEAVES rather than on a timer. Checked against this export rather than taken on trust: all 24 title elements are constant across [160,238), and the lower bound is EXACT -- ptcopyright is mid-ramp at t=159.9 and settled at t=160.0, so the intersection is the window. Classified undecodable-with-reach. 236 stays, needs no defending, and nobody should spend a run on it. --- port/scripts/boot.gd | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/port/scripts/boot.gd b/port/scripts/boot.gd index d10d4dc2..165ac8e3 100644 --- a/port/scripts/boot.gd +++ b/port/scripts/boot.gd @@ -976,12 +976,27 @@ func _unhandled_input(event: InputEvent) -> void: # pre-registered test refuted it: three elements mid-fade vanish in a single # frame. I had implemented the overlay-only version; it is reverted here. # - # ⚠️ The target is BOUNDED, not pinned. The capture puts it inside [100, 238] - # -- past the sweep's gate at 100, and not past 250 or `ptloop01`'s exit ramp - # would have taken the sweep back to alpha 0. `settle_time()` is 236 for this - # overlay, which is inside that bound and is where the plate reaches full - # alpha. If the game turns out to snap somewhere else in the window, this is - # the line to move and nothing else changes. + # ❔ THE TARGET IS UNDECODABLE, AND FREE. Not "bounded pending a better + # capture" -- no capture can ever decide it, so 236 needs no defending. + # + # The window is [160, 238): `ptcopyright` goes absent -> alpha 255 in one + # frame at the snap, skipping its declared 138->160 ramp, so t >= 160; the + # sweeps are still at 255 and their exit runs 238->250, so t < 238. + # + # 📌 EVERY element holds a constant pose across that window -- checked here + # against this export, not taken on trust, and the intersection IS the window: + # at t=159.9 `ptcopyright` is mid-ramp and at t=160.0 it is not, so the lower + # bound is exact. With the leaves restarting at 0 on the snap (below), every + # target in the window renders the SAME frame, and it never becomes observable + # later either: the clock freezes at settle, and the 238->250 exit plays when + # the screen LEAVES rather than on a timer. + # + # So a different value here has no consequence at any instant, ever. + # `settle_time()` = 236 is inside the window and is where the plate reaches + # full alpha. `docs/re/f5-snap-target-undecodable-with-reach.md` classifies it + # ❔ undecodable-with-reach: pinning the literal would need guest memory or the + # assigning code, a different instrument than any capture, for a number with + # no observable effect. Nobody should spend a run on it. # # 🔴 NOT `settle_instant`: the first version of this used it and NEVER FIRED, # silently. `press_start` declares a 22-unit settle window against a 30-unit