From 975d24def26f16cb005d7548ae2ff69bd5e45fe9 Mon Sep 17 00:00:00 2001 From: Sylpheed port agent Date: Tue, 1 Sep 2026 19:51:55 +0000 Subject: [PATCH] port: --linger, so a scripted walk can observe what arrives after it settles Last iteration I inferred the returned plate's fade from code-path identity because the harness could not watch it: `--script` quits the moment the last step settles, and the plate arrives on its declared ramp ~3.6 s later. A film of `--script=cancel` stopped at 168 units and never reached 214. `--linger=SECONDS` holds the run open past the walk. `_script_settled` still waits for a hold before shooting -- a shot taken mid-fade is a photograph of a fade -- this only changes what happens after the shot, which was "exit". Pre-registered: the returned plate sits at its floor until 214 units, then rises to full by 236, the same ramp the boot shows. Measured: units=208.75 0.145404 floor units=216.58 0.158596 units=224.41 0.179036 units=232.25 0.203050 units=240.08 0.215005 full -- boot path gives 0.2142 at t=236 So the return fades, identically to the boot, and it is now OBSERVED rather than argued from the branch it takes. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_018AHUQvXGyNcKonSEWsgWcX --- port/scripts/boot.gd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/port/scripts/boot.gd b/port/scripts/boot.gd index b1d95cd6..42dd2ee6 100644 --- a/port/scripts/boot.gd +++ b/port/scripts/boot.gd @@ -1333,6 +1333,22 @@ func _run_script() -> void: # at, not the one it started from. See the note beside the early capture. if _capture_to != "": await _capture(_capture_to) + # 🔴 `--linger=SECONDS` KEEPS A SCRIPTED RUN ALIVE AFTER THE WALK SETTLES. + # + # Without it a scripted run quits the moment the last step settles, and + # ANYTHING THE SCREEN DOES AFTERWARDS IS UNOBSERVABLE. That is not + # hypothetical: the plate on a returned title arrives on its own declared + # ramp at t=214..236, which is ~3.6 s after the screen settles, and a film of + # `--script=cancel` stopped at 168 units and never reached it. The behaviour + # was inferred from code-path identity because the harness could not watch it. + # + # `_script_settled` waiting for a hold is right -- a shot taken mid-fade is a + # photograph of a fade. This does not change that. It changes what happens + # after the shot, which was "exit" and is now optionally "keep running". + var linger := float(_args().get("linger", "0")) + if linger > 0.0: + print("linger: holding %.2f s past the walk so late arrivals are observable" % linger) + await get_tree().create_timer(linger).timeout get_tree().quit(0)