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.
This commit is contained in:
Sylpheed port agent
2026-09-02 21:38:45 +00:00
parent 2d2caccd75
commit 1628f0e9b5

View File

@@ -976,12 +976,27 @@ func _unhandled_input(event: InputEvent) -> void:
# pre-registered test refuted it: three elements mid-fade vanish in a single # 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. # 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] # ❔ THE TARGET IS UNDECODABLE, AND FREE. Not "bounded pending a better
# -- past the sweep's gate at 100, and not past 250 or `ptloop01`'s exit ramp # capture" -- no capture can ever decide it, so 236 needs no defending.
# 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 # The window is [160, 238): `ptcopyright` goes absent -> alpha 255 in one
# alpha. If the game turns out to snap somewhere else in the window, this is # frame at the snap, skipping its declared 138->160 ramp, so t >= 160; the
# the line to move and nothing else changes. # 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, # 🔴 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 # silently. `press_start` declares a 22-unit settle window against a 30-unit