port: the third clock was in my own enumeration and I did not wire it

Last iteration I enumerated three free-running clocks, wrote that the leaf is
pinned only by --leaf-time, then tested reproducibility without passing
--leaf-time and concluded nothing free-runs on the menu path. The answer was one
paragraph above the experiment that contradicted it.

My own flagged weakness found it: deliberate wall-clock variation via
--script=wait:N, putting the capture at t=96 units against t=369. Spin pinned
only, wait 0.5 vs 5.0 differs by max 91.19 per channel; with --leaf-time=0 added
it is byte-identical. draw_leaf_for is ptloop01/ptloop02, present on main_menu and
not just the title, which is why that row drifted.

verify-capture passed --loop-phase=0 and not --leaf-time=0 -- I fixed the clock I
had been bitten by and left the one I had merely listed. Enumeration without
follow-through fails exactly like no enumeration.

Both are now pinned at all six render sites. main_menu returns 13.21 across three
runs and two renders after different waits are byte-identical.

The number moved 13.26 -> 13.21 and that is NOT an accuracy improvement: pinning
the leaf at phase 0 puts ptloop01/02 at one specific pose rather than wherever the
wall clock left them. A different configuration, now reproducible. Which pose the
game shows at rest is not settled by this.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 15:28:19 +00:00
parent a04d8a6740
commit 49958ff090
2 changed files with 58 additions and 7 deletions

View File

@@ -144,20 +144,20 @@ for row in "${MAP[@]}"; do
if [ ${#want[@]} -gt 0 ] && ! printf '%s\n' "${want[@]}" | grep -qx "$name"; then continue; fi
[ -f "$cap" ] || { printf '%-17s %s\n' "$name" "no capture"; continue; }
if [ "$pose" = band ]; then
godot --path port --resolution 1280x720 -- --loop-phase=0 "--screen=title" --overlay=press_start \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--screen=title" --overlay=press_start \
--time=3.95 "--capture=$OUT/$name.full.png" >"$OUT/$name.log" 2>&1 || true
[ -f "$OUT/$name.full.png" ] && convert "$OUT/$name.full.png" \
-crop 1279x120+0+520 +repage "$OUT/$name.render.png"
elif [ "$pose" = focus ]; then
godot --path port --resolution 1280x720 -- --loop-phase=0 "--menu=main_menu" "--focus=$forced" \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--menu=main_menu" "--focus=$forced" \
--script=wait "--shots=$OUT/$name" >"$OUT/$name.log" 2>&1 || true
[ -f "$OUT/${name}_00_start.png" ] && cp "$OUT/${name}_00_start.png" "$OUT/$name.render.png"
elif [ "$pose" = menu ]; then
godot --path port --resolution 1280x720 -- --loop-phase=0 "--menu=$name" --script=wait \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--menu=$name" --script=wait \
"--shots=$OUT/$name" >"$OUT/$name.log" 2>&1 || true
[ -f "$OUT/${name}_00_start.png" ] && cp "$OUT/${name}_00_start.png" "$OUT/$name.render.png"
elif [ "$pose" = plate ]; then
godot --path port --resolution 1280x720 -- --loop-phase=0 "--screen=title" --overlay=press_start \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--screen=title" --overlay=press_start \
--time=3.95 "--capture=$OUT/$name.render.png" >"$OUT/$name.log" 2>&1 || true
elif [ "$pose" = t357 ]; then
# 🔴 NO `--time` HERE EITHER, and the row's note used to claim otherwise.
@@ -177,7 +177,7 @@ for row in "${MAP[@]}"; do
#
# So: pose at the settle, which is what was actually being measured, and let
# the leaf loop carry the sweeps' phase.
godot --path port --resolution 1280x720 -- --loop-phase=0 "--screen=$name" \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--screen=$name" \
"--capture=$OUT/$name.render.png" >"$OUT/$name.log" 2>&1 || true
else
# NO `--time`. It used to pass `--time=99` as an idiom for "settled", and
@@ -189,7 +189,7 @@ for row in "${MAP[@]}"; do
# that accident. Now that `--time` is honoured, asking for it explicitly
# would pose past the end of every group, so the request is simply dropped
# and the settled pose asked for by omission.
godot --path port --resolution 1280x720 -- --loop-phase=0 "--screen=$name" \
godot --path port --resolution 1280x720 -- --loop-phase=0 --leaf-time=0 "--screen=$name" \
"--capture=$OUT/$name.render.png" >"$OUT/$name.log" 2>&1 || true
fi
[ -f "$OUT/$name.render.png" ] || { printf '%-17s %s\n' "$name" "render failed"; continue; }