Files
Sylpheed/tools/re-capture/title_sweep_probe.sh
sylph-decoder fbca63c87b re: F6 unit 9 -- wrap-to-wrap period NOT obtained, two harness failures
Unit 8's rate (0.514 units/frame) rests on one wrap, a start-to-wrap span
rather than a period. Hardening it needs a longer capture with two or more
wraps. Two attempts, both failed on the harness rather than the game.

First launch never started: the pgrep && echo || { } guard took the wrong
branch, no output directory was created and no process ran, while a stale
emulator from the previous iteration was still up. It looked like a running
capture for several minutes.

Second launch started, armed, pressed A and wrote no draw log at all --
canary.stdout stayed at 0 bytes and no xenia_re_ui_draws log appeared,
despite the script printing "armed at 8s". Likely a race with the orphaned
emulator from the first failure, not confirmed.

Unit 8's numbers are unaffected; they came from the intact f6 capture,
which is still on disk. The offset has two independent supports; the rate
still rests on a single wrap and the port should not ship on it.

The lesson, and it is the second harness failure of this shape: "armed at
8s" printed while nothing was being logged. The arming step reports success
on SENDING the keystroke, not on the logger responding -- the same silent
failure that cost the first F1 probe a run, which I "fixed" by making the
window lookup fatal. That fix was too narrow: the window was found, the key
was sent, and the log still never appeared. The check that would have
caught both is to wait for the draw log to exist and be non-empty after
arming, and abort loudly otherwise. A probe that cannot confirm its own
instrument is recording is a probe whose negatives mean nothing, and I have
now written that bug twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
2026-09-02 19:09:59 +00:00

31 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# F6 unit 2 -- capture the TITLE's build-in and read the sweep's drawn alpha.
#
# Discriminator: pteff03's LEAF declares alpha 255 from its own t=0, while its
# PARENT ramps 0->255 across t=70..100. So in the drawn vertex colour:
# flat 255 throughout => the parent is NOT multiplied in
# a ramp 0->255 => it IS
# That also settles the port's own flagged ambiguity, whose stated separating
# interval (t=100..238) is the same one F6 is about.
#
# Simpler than the menu probe on purpose: ONE A press to skip the attract video,
# then no further input, so the title builds in undisturbed and stays.
set -u
export HOME=/sylph-home/re SDL_AUDIODRIVER=dummy DISPLAY=:98
export XENIA_PAD_FILE=/tmp/xenia_pad.txt
OUT="${1:-/sylph-home/re/f6}"; mkdir -p "$OUT"; rm -f "$OUT"/xenia_re_ui_draws_*.log
pad(){ printf '%s' "$1" > "$XENIA_PAD_FILE.tmp"; mv "$XENIA_PAD_FILE.tmp" "$XENIA_PAD_FILE"; }
pad ""
( cd "$OUT" && nohup run-canary --log_ui_draws=true \
--ui_draw_capture_frames=6000 --ui_draw_capture_max=1500000 \
>"$OUT/canary.stdout" 2>"$OUT/canary.stderr" & )
sleep 8
win="$(xdotool search --name "Xenia-canary" | tail -1)"
[ -n "$win" ] || { echo "FATAL: no Xenia window"; pkill -x xenia_canary; exit 1; }
xdotool windowactivate "$win" 2>/dev/null; xdotool key --window "$win" F10; xdotool key F10
echo "armed at ${SECONDS}s"
sleep 12; pad "press=A"; sleep 0.4; pad ""; echo "A (skip video) at ${SECONDS}s"
sleep 150 # let the title build in and settle, no further input
pkill -x xenia_canary
echo "done at ${SECONDS}s"; ls -la "$OUT"/*.log 2>/dev/null