Files
Sylpheed/tools/re-capture/jp_draw_capture.sh
sylph-decoder c5d685ba15 re: the sweep IS drawn on the JP title -- and my gate was phase-locking the shutter
The occlusion hypothesis is refuted: build 7 draws the same three ROT strips at
higher alpha than English, so there was never an absence to explain.

The 0.32-vs-11.9 tension that motivated it was an artefact of my own instrument.
Both JP captures were shuttered on the plate pulse, and the plate's pulse is part
of the animation -- so the gate synchronises the shutter to the animation's phase.
Measured at the shutter instant, the sweep sits 25-26 px apart across two runs in
different locales and different sessions: 1.6 % of a ~1600 px traverse.

So the 0.32 I recorded as between-session capture noise measures my trigger's
repeatability, and I read it as evidence the title is still when it is evidence
the gate works. The era adjudication is unaffected -- margin 16.72 clears even the
un-locked 11.9 -- and unaffected for the reason that file already gave: correlated
noise cancels in a margin.

Refutation attempt on sylpheed-port's positional-mechanism rejection: FAILED, the
claim stands. Its residual sits inside lit logos, and the logo ROI is
byte-identical across five differently-phased frames in two sessions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
2026-08-30 19:52:15 +00:00

49 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Does the game DRAW the sweep leaves on the JAPANESE title, and do they cross
# the adjudication box?
#
# ui-resting-pose.md carries an unresolved tension. On the EN title the leaves are
# drawn and free-run: two strips taller than the screen, sweeping in opposite
# directions at ~4.3 px/frame. Two renders one plateau-phase apart differ by RMSE
# 11.9 INSIDE the box the ptlogo_eff3 adjudication uses. Yet two JP captures from
# different sessions differ by only 0.32 there. Two candidates, neither tested:
# the two JP shutters fell at similar phases (~1 % coincidence on a 600-unit
# cycle), or build 7's denser logo stack -- the katakana plus the crystalline
# burst the English title lacks -- OCCLUDES the sweep inside that box.
#
# A draw capture of the JP title distinguishes them: if the strips are present and
# crossing the box, the 0.32 was luck; if absent or clipped there, it is occlusion.
#
# Locale is set and ALWAYS restored, as in jp_title_session.sh.
set -u
export HOME=/sylph-home/re SDL_AUDIODRIVER=dummy DISPLAY=:98
SD="$(cd "$(dirname "$0")" && pwd)"
OUT="${1:-/sylph-home/re/jpdraw}"; mkdir -p "$OUT"; rm -f "$OUT"/xenia_re_ui_draws_*.log
restore() { echo "-- restoring locale --"
python3 "$SD/set_console_language.py" en || echo "RESTORE FAILED — check by hand"
python3 "$SD/set_console_language.py" --show; }
trap restore EXIT INT TERM
. "$SD/ensure_single_emulator.sh"; ensure_single_emulator || exit 3
python3 "$SD/set_console_language.py" ja
python3 "$SD/set_console_language.py" --show
( cd "$OUT" && nohup run-canary --mem_watch=false --log_ui_draws=true \
--ui_draw_capture_frames=150 --ui_draw_capture_max=400000 \
--logged_profile_slot_0_xuid=B13EBABEBABEBABE \
>"$OUT/canary.stdout" 2>"$OUT/canary.stderr" & )
sleep 10
ps -C xenia_canary >/dev/null 2>&1 || { echo "EMULATOR DID NOT START:"; tail -3 "$OUT/canary.stderr"; exit 4; }
echo "── EFFECTIVE CONFIG ──"
echo " locale = ja (restored on exit)"
echo " emulator = $(ps -C xenia_canary --no-headers | wc -l) instance(s)"
echo " capture = log_ui_draws, 150 frames, armed by F10 at the plate pulse"
until xdotool search --name "Xenia-canary" >/dev/null 2>&1; do sleep 1; done
win="$(xdotool search --name "Xenia-canary" | tail -1)"
python3 "$SD/wait_plate_pulse.py" 900 || exit 1
xdotool windowactivate --sync "$win"; sleep 1
xdotool key F10; sleep 0.6
xdotool mousemove 900 400 click 1
sleep 12
grep -i "UI-CAP" "$OUT/canary.stdout" | tail -2
ls -l "$OUT"/xenia_re_ui_draws_*.log 2>/dev/null || echo "NO CAPTURE LOG"
echo "JP DRAW CAPTURE DONE"