# Do LOAD GAME, TUTORIAL and OPTIONS remember their cursors? ✅ NO -- ALL RESET.
# MEASURED 2026-08-31, one boot, fourth attempt.
#
# The main menu PERSISTS its cursor across menu -> title -> menu
# (focus-persists-across-title.txt). EXTRAS RESETS (extras-focus-resets.txt).
# Two screens disagreeing means no menu-wide rule and every screen must be
# measured. These are the three that were left. ❔ NEW GAME stays deliberately
# untested -- it starts a game.
#
#   LOAD GAME   RESETS   in-cursor 21.6 from opened vs  86.3 from where left
#   TUTORIAL    RESETS   in-cursor  2.3 from opened vs 113.2 from where left
#   OPTIONS     RESETS   in-cursor  1.9 from opened vs 102.6 from where left
#
# ✅ SO: FOUR OF FOUR MEASURED SUBMENUS RESET. Only the MAIN MENU persists, and
# it is the exception rather than the rule.
#
################################################################################
# WHY THIS RUN WORKED WHERE THREE DID NOT -- every control here is a previous
# failure:
#
#  * DECISION ON THE CURSOR'S OWN REGION. The pixels that change when the cursor
#    moves ARE the cursor, so no per-screen geometry is assumed. Sweep 1 voided
#    all three because ring_row.py scans the MAIN MENU's gutter (x 500:542) and
#    these screens put their cursors at x 97..231, 338..1099 and 153..479 -- it
#    was reading a static element and reporting no motion.
#  * NARROW back-on-the-menu test, by ring row. Sweep 2 died when a crash dialog
#    covered the screen centre: a whole-frame identity test can never match again
#    once anything overlays the frame, while the narrow column kept reading.
#  * ABSOLUTE row check after EVERY navigation press, not just the total -- a
#    constant offset passes a differential control exactly, which is how an
#    earlier run walked to OPTIONS believing it was EXTRAS.
#  * A TWO-SIDED SELF-TEST that constructs BOTH verdicts from known frames and
#    exits 3 if either is wrong. It passed here; it had already caught a rule I
#    broke myself in sweep 3, which would otherwise have reported RESETS for all
#    three screens -- the same answer, fabricated.
#  * Every press confirmed from the guest's own [RE-INPUT] log.
#  * The tool COMMITTED BEFORE RUNNING, and nothing else run during the boot.
#
# ✅ AND THE SCREENS ARE CONFIRMED BY EYE, because a previous run was fooled about
# which screen it was on:
#   captures/menu-nav/live-tutorial-submenu.png  -- TUTORIAL: BASIC CONTROLS /
#     HEADS-UP DISPLAY / RADAR under "Level 1", SUPPLY AND SPECIAL MOVES / RADIO
#     ORDERS / ADVANCED CONTROLS under "Level 2", then BACK. Seven items in two
#     groups, with a description panel on the left.
#   captures/menu-nav/live-load-game-slots.png   -- LOAD GAME: a SCROLLING slot
#     list with the selection held at the vertical CENTRE, Details panel at right.
#
# 📌 LOAD GAME's 21.6 is the one number that is not near zero, and the capture
# explains it: the list SCROLLS rather than moving a ring, so a DOWN redraws the
# whole list and re-entry restores the scroll position rather than a cursor sprite.
# 4x separation, same verdict, different mechanism.
#
# ❔ STILL NOT SEPARATED: "resets to the named item" vs "resets to the TOP item".
# sylpheed-port asked for a submenu whose opening item is not its first, which
# would decide it. None of these is one. TUTORIAL opens on BASIC CONTROLS (first),
# OPTIONS on GAME SETTINGS (first), and LOAD GAME on slot 01 -- which LOOKS
# non-first because slots 19 and 20 are drawn above it, but that is the list
# wrapping around a centred selection, and 01 is still the first slot.
#
# ⚠️ REACH: one boot, one round trip per screen, one direction (DOWN), and one
# entry each. Not tested: a second re-entry, a reset after a reboot, or whether
# any submenu behaves differently when entered from a different parent focus.
