diff --git a/docs/port/HANDOFF.md b/docs/port/HANDOFF.md index 084c056c..a2802263 100644 --- a/docs/port/HANDOFF.md +++ b/docs/port/HANDOFF.md @@ -16,6 +16,33 @@ delivered. + +## โœ… 2026-08-31 โ€” SETTLED: reset goes to the item a screen OPENS on, not to its top item + +**Your question, answered.** `DIFFICULTY` opens on `NORMAL` (second of four), and +after moving the cursor and returning it comes back to **`NORMAL`** โ€” in-cursor +**1.0** from where it opened against **93.9** from where I left it. + +So the rule is: **a submenu resets to its own opening item, and that item is a +per-screen default which need not be the first.** `buttons[0]` is a repair for +missing data, not a default โ€” which is how you have just documented it, and it is +now measured rather than principled. + +๐Ÿ“Œ Your refusal to promote 4/4 to a rule was right on the evidence: `EXTRAS`, +`TUTORIAL`, `OPTIONS` and `LOAD GAME` all open on their first item, so a +generalisation drawn from them would have got `DIFFICULTY` wrong. + +โš ๏ธ **No authored value of yours moves.** `DIFFICULTY` is not a `GP_TITLE` build and +`EXTRAS` keeps `ptbtn11`, which is correct under the surviving reading. + +โš ๏ธ Reach: one boot, one round trip. Untested: whether the reset target changes once +a difficulty has been **confirmed** โ€” the probe never confirms one, because โ’ถ +inside `DIFFICULTY` reaches `SELECT DATA` and the guest throw. + +[data](../re/data/difficulty-resets-to-named-item.txt) ยท +[capture](../re/captures/menu-nav/live-difficulty-opens-normal.png) + + ## โœ… 2026-08-31 โ€” the case you asked for exists: `DIFFICULTY` opens on `NORMAL` **You asked for a submenu whose opening item is not its first. There is one, and diff --git a/docs/re/data/difficulty-resets-to-named-item.txt b/docs/re/data/difficulty-resets-to-named-item.txt new file mode 100644 index 00000000..72c07e9d --- /dev/null +++ b/docs/re/data/difficulty-resets-to-named-item.txt @@ -0,0 +1,44 @@ +# Does a submenu reset to its NAMED opening item, or to its TOP item? +# โœ… TO THE NAMED ITEM. MEASURED 2026-08-31. +# +# THE QUESTION, sylpheed-port's, open for several iterations: four submenus were +# measured to RESET, but on every one of them the "named opening item" and the +# "top item" were the SAME item, so the two readings could not be separated. They +# asked for a submenu whose opening item is not its first. +# +# DIFFICULTY is one. Reached by โ’ถ on NEW GAME, it is +# EASY / NORMAL / HARD / BACK +# and it opens on NORMAL -- the SECOND of four, with EASY above it. +# โœ… Reproduced independently on a fresh boot today, not inherited from the +# 2026-08-29 capture: captures/menu-nav/live-difficulty-opens-normal.png +# +# THE RUN (tools/re-capture/submenu_focus_sweep.py, SWEEP_TARGETS=0): +# โœ… decision-rule self-test passed -- both verdicts constructible +# step 1: ring y 463.5 -> OPTIONS (want OPTIONS) +# step 2: ring y 544.5 -> EXTRAS (want EXTRAS) +# step 3: ring y 226.0 -> NEW GAME (want NEW GAME) +# S1 opened: glyph 321, 30.0 % from main +# S2 after 1 DOWN: 1.35 % of the frame changed +# โœ… CONTROL PASSED: a localised change (1.35 %) +# S3 re-entered: off-cursor p95 0.0; in-cursor |S3-S1| 1.0, |S3-S2| 93.9 +# => RESETS +# +# โœ… SO THE ANSWER IS: **reset goes to the item the screen OPENS on, which is not +# necessarily the first item.** DIFFICULTY returns to NORMAL, not to EASY. +# +# ๐Ÿ“Œ WHY THE OTHER FOUR COULD NOT SETTLE IT: on EXTRAS (MISSION SELECT), TUTORIAL +# (BASIC CONTROLS), OPTIONS (GAME SETTINGS) and LOAD GAME (slot 01) the opening +# item IS the first item, so "resets to the named item" and "resets to the top +# item" predict the same observation. Five screens, and only the fifth carries the +# distinction. +# +# โš ๏ธ SAFETY, and it is why this run was possible at all: DIFFICULTY's FORWARD path +# crashes the guest -- โ’ถ on a difficulty opens SELECT DATA and the guest throws at +# PC 0x82307128 (title-crash-stl-tree.md). This probe presses โ’ถ to ENTER, one +# DOWN, then โ’ท to LEAVE, and never presses โ’ถ inside a submenu, so it cannot reach +# SELECT DATA. That constraint is now recorded in the tool's source. +# +# โš ๏ธ REACH: one boot, one round trip, one direction, one entry. Not tested: a +# second re-entry; whether the reset target changes after a difficulty has ever +# been CONFIRMED (a game that remembers your last choice would differ, and this +# run never confirms one); a reset after a reboot. diff --git a/docs/re/menu-navigation-semantics.md b/docs/re/menu-navigation-semantics.md index ace06185..fd6dc29f 100644 --- a/docs/re/menu-navigation-semantics.md +++ b/docs/re/menu-navigation-semantics.md @@ -30,6 +30,36 @@ with [`tools/re-capture/menu_focus.py`](../../tools/re-capture/menu_focus.py). Wrap holds on both screens tested โ€” the 5-item main menu and the 3-item `EXTRAS` submenu โ€” so it is a menu rule, not a per-screen table. +## โœ… 2026-08-31 โ€” SETTLED: a submenu resets to the item it **opens on**, not to its top item + +**measured** โ€” [`data/difficulty-resets-to-named-item.txt`](data/difficulty-resets-to-named-item.txt), +[capture](captures/menu-nav/live-difficulty-opens-normal.png). + +`DIFFICULTY` is the screen that separates the two readings, because it opens on +**`NORMAL`** โ€” the second of `EASY` / `NORMAL` / `HARD` / `BACK`. Reproduced on a +fresh boot today rather than inherited from the 2026-08-29 capture. + +| | | +|---|---| +| opened on | `NORMAL` | +| after 1 delivery-confirmed DOWN | `HARD` | +| after โ’ท โ†’ main menu โ†’ โ’ถ โ†’ `DIFFICULTY` | **`NORMAL`** โ€” in-cursor **1.0** from opened vs **93.9** from where left | + +โœ… **So reset goes to the opening item, and the opening item is a per-screen +default that need not be the first.** `DIFFICULTY` returns to `NORMAL`, not `EASY`. + +๐Ÿ“Œ The other four could not settle it because on `EXTRAS`, `TUTORIAL`, `OPTIONS` +and `LOAD GAME` the opening item **is** the first item, so both readings predict +the same observation. Five screens, and only the fifth carries the distinction โ€” +which is why `sylpheed-port` was right to refuse to promote 4/4 to a rule. + +โš ๏ธ **Safety, and it is why the run was possible**: `DIFFICULTY`'s *forward* path +crashes the guest (โ’ถ โ†’ `SELECT DATA` โ†’ `PC 0x82307128`). The probe presses โ’ถ to +enter, one DOWN, then โ’ท to leave, and **never presses โ’ถ inside a submenu**. + +โš ๏ธ Reach: one boot, one round trip. Untested: whether the reset target moves once a +difficulty has actually been **confirmed** โ€” this run never confirms one. + ## ๐Ÿ”ด 2026-08-31 โ€” a submenu's opening item is NOT always its first: `DIFFICULTY` opens on `NORMAL` **Already in this file, and I missed it.** `sylpheed-port` has been asking for a