port: --focus was ignored on the menu path; focus rendering now verified against the oracle
live-main-menu-options-focused.png -- the only capture of a known focus state -- was untestable because --focus= parsed, was stored, and was overwritten by the authored initial focus on every _menu_enter. Every run logged focus ptbtn01 whatever was asked for. Now pushed into the menu model so navigation continues from where it was forced. With it working, each capture picks out exactly one button: ptbtn04 at 0.1355% against 0.70-0.82% for the others on the OPTIONS capture, and ptbtn01 at 0.0705% against 0.72-0.84% on the plain one. 5x and 10x discrimination. First time the port's focus rendering has been checked against the game at all -- the existing main_menu row uses an authored focus and could never have caught a focus error. Records in flow.json that live-main-menu.png shows NEW GAME focused, so the authored initial_focus matches the one frame it can be checked against -- and that this does NOT overturn Q5's measured instability. It stays authored. Adds main_menu_options to verify-capture at 0.13%. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -52,6 +52,14 @@ CAPS=docs/re/captures/title-builds
|
||||
MAP=(
|
||||
"main_menu:$CAPS/live-main-menu.png:menu"
|
||||
"extras:$CAPS/live-extras.png:menu"
|
||||
# The only capture of a MEASURED focus state, and it was unusable until
|
||||
# `--focus=` was made to work on the `--menu` path (it parsed, was stored, and
|
||||
# was overwritten by the authored initial focus on every `_menu_enter`).
|
||||
#
|
||||
# It discriminates: rendering each of the five buttons focused against this
|
||||
# capture gives 0.1355 % for `ptbtn04` and 0.70-0.82 % for the other four. The
|
||||
# port's focus rendering identifies the right button by a factor of five.
|
||||
"main_menu_options:$CAPS/live-main-menu-options-focused.png:focus:ptbtn04"
|
||||
# ⚠️ THE TITLE IS POSED AT t=357.7 UNITS, NOT AT ITS SETTLE, and the time is
|
||||
# MEASURED rather than chosen. The two `ptloop` sweeps are a continuous
|
||||
# animation whose leaf group ends at t=600 with the quads parked off-screen at
|
||||
@@ -104,10 +112,14 @@ echo "REGION -- a missing or misplaced element is a large connected blob."
|
||||
echo
|
||||
printf '%-17s %-9s %-7s %-22s %s\n' screen raw-rmse diff region note
|
||||
for row in "${MAP[@]}"; do
|
||||
IFS=: read -r name cap pose <<<"$row"
|
||||
IFS=: read -r name cap pose forced <<<"$row"
|
||||
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" = menu ]; then
|
||||
if [ "$pose" = focus ]; then
|
||||
godot --path port --resolution 1280x720 -- "--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 -- "--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"
|
||||
|
||||
Reference in New Issue
Block a user