Three captures, aligned by the sweep's position rather than by frame number. The plate's alpha goes 23,46,69,92,115,139 over ~11 frames with no input, and 255 in a single frame when A is pressed: zero intermediate values against eleven. A cuts, it does not accelerate -- the human's prior holds. The control is what makes it readable. Four elements ramp out right around the press and I could have reported that as the effect; at sweep x=-1.42 all three runs agree quad for quad, so those exits are the ordinary build-in. Refutes clock:"shared" on F4's own discriminator: the artwork keeps animating across the press, frame for frame identical to the control. Reach stated -- that half rests on a 5-frame window, since everything else on screen is already at 255 and cannot discriminate. Also records the first attempt's miss: blind wall-clock timing put the press after the settle, where A is accepted instead. The probe now gates on the sweep appearing, which is the parent's declared t=70..100 gate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jc4pciRArGHfxGGhEbwp5t
69 lines
3.5 KiB
Bash
Executable File
69 lines
3.5 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/f5}"; 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"
|
|
|
|
# ⚠️ ARMING IS NOT CONFIRMED BY SENDING THE KEY. Twice now a probe has printed
|
|
# "armed", pressed on, and written no draw log at all -- once because the window
|
|
# lookup failed, once with the window found and the key sent. A probe that cannot
|
|
# confirm its own instrument is recording is a probe whose negatives mean nothing.
|
|
# So: wait for the log to exist AND grow, and abort loudly if it does not.
|
|
for _ in $(seq 1 45); do
|
|
sz=$(stat -c %s "$OUT"/xenia_re_ui_draws_*.log 2>/dev/null | head -1 || echo 0)
|
|
[ "${sz:-0}" -gt 0 ] && break
|
|
sleep 1
|
|
done
|
|
[ "${sz:-0}" -gt 0 ] || { echo "FATAL: armed but no draw log after 45s -- not recording"; pkill -x xenia_canary; exit 1; }
|
|
echo "logging confirmed at ${SECONDS}s (${sz} bytes)"
|
|
|
|
# --- F5: a SECOND A during the title build-in ---------------------------
|
|
# Discriminator (brief): a snap shows no intermediate alphas, an acceleration
|
|
# does. Press 2 must land while the build-in is still running.
|
|
#
|
|
# ⚠️ BLIND WALL-CLOCK TIMING DOES NOT WORK HERE and the first run proved it:
|
|
# +16 s put the press at log frame ~1217 when the title had already settled at
|
|
# ~653, so A was accepted instead of accelerating anything. The build-in is
|
|
# only ~180 log frames wide and run pacing varies 2x. So GATE ON AN OBSERVABLE:
|
|
# wait for the sweep's texture page to appear (that IS title t=70..100, the
|
|
# parent's declared gate opening), then let a fixed number of frames pass.
|
|
LOG=$(ls "$OUT"/xenia_re_ui_draws_*.log 2>/dev/null | head -1)
|
|
SWEEP=8154424FFC48FE61
|
|
for _ in $(seq 1 900); do
|
|
grep -q "$SWEEP" "$LOG" 2>/dev/null && break
|
|
sleep 0.2
|
|
done
|
|
grep -q "$SWEEP" "$LOG" 2>/dev/null || { echo "FATAL: sweep never appeared -- title build-in not seen"; pkill -x xenia_canary; exit 1; }
|
|
n0=$(grep -c '^--- frame' "$LOG")
|
|
echo "sweep up at log frame ${n0} (title t~70..100) at ${SECONDS}s"
|
|
target=$((n0 + ${PRESS2_FRAMES:-40}))
|
|
until [ "$(grep -c '^--- frame' "$LOG")" -ge "$target" ]; do sleep 0.2; done
|
|
echo "PRESS2 at log frame ~${target}, ${SECONDS}s"
|
|
pad "press=A"; sleep 0.4; pad ""
|
|
sleep 60
|
|
pkill -x xenia_canary
|
|
echo "done at ${SECONDS}s"; ls -la "$OUT"/*.log 2>/dev/null
|