Stabilization batch 20¶
Follow-up: batch 21 repairs the subsequently observed MainMenu quit/corner actions and corrects an unintended navigation-mode change in this batch's six result-button event records. The observations and screenshots below describe the batch-20 candidate; use batch 21 and the issue register for current state.
Scope: GAME-24's Meadow game-over Restart/Main Menu confirmation flow. Complete the existing page/caller migration for this flow; no menu redesign or new feature. Settings/Database and later-stage menu migration remain separate work.
Evidence and repair¶
Both result buttons and both confirmation No buttons still call removed GameMenuManager.OpenPanel with the old Panel argument type. The existing Yes buttons already resolve to PlayAgain/QuitArena. The two result confirmations are inactive legacy GamePanel components, and the result root has an unused GamePanel referenced only by the two obsolete No events.
Migrate the two existing confirmation component IDs to Page, using the current pause confirmation's zoom animation data with each existing CanvasGroup. Activate the Page objects for their Awake/input initialization, initially hide their CanvasGroups and disable raycasts, and preserve layout/text/child/component identities. Migrate all six result button events to current void GameMenuManager actions. Remove the now-unreferenced legacy GamePanel on the result root; retain GameEndManager and all result presentation/data references. GamePanel itself remains in use by Tutorial and unmigrated scenes.
GameMenuManager owns the result pages, their first No focus, and input access to the underlying result CanvasGroup. Existing restart/quit intent methods choose the appropriate result or pause confirmation from run state. Result opening blocks underlying input and duplicate/cross pushes, selects No, and remembers the initiating result button. Both No and root Back call the same owner-controlled close path, restoring result input/focus without resuming the finished run. Yes uses the existing guarded closing transition and scene destinations. A result root is not falsely modeled as a generic navigation Page; result presentation remains owned by the existing GameManager/GameEndManager flow. New trace markers cover result confirmation open/cancel and arena-exit request/completion.
Review additionally finds Page's hidden lifecycle only disables raycasts, leaving keyboard Selectables interactable. Page now disables its own CanvasGroup.interactable in Awake/Exit and enables it in Enter, alongside existing visibility/raycast changes. The newly migrated confirmations serialize a non-interactable hidden initial state. This belongs to the Page lifecycle rather than a result-only interaction workaround in GameManager. Existing pause and menu behavior therefore receive additional regression checks. The first native build completed but is superseded before any player launch; only the later candidate can validate this final patch.
Focused regression¶
RunBatch20 extends the existing Editor-only TransitionChecks partial runner. Four groups inspect imported page/reference/legacy removal data, all six actual result bindings, actual result open/duplicate/No/Back/focus/input dispatch with guarded Yes, and existing pause confirmation dispatch as a control. Preview pages have animation elements temporarily cleared and persistent events enabled for Edit Mode; a scoped registered EventSystem supplies selection. Close without saving and restore globals/time scale/audio references. Guarded Yes deliberately suppresses scene loads, so these checks do not establish real retry/return or animations.
Original same harness: 1/4, Editor terminal exit 1. The control passes; page ownership, event routes, and actual result-button dispatch fail. In particular, the original result event is invoked and produces no confirmation, rather than merely failing a string inspection.
Initial repaired harness: 4/4, Editor terminal exit 0. The final harness adds hidden/entered/exited interaction assertions; all four groups still pass, exit 0. Existing pause routes remain unchanged and their dispatch control passes. The older RunBatch10 imported-GamePanel count for Meadow is updated from eight to five to account for the two intentional conversions and one removed unused component; all other scene counts remain unchanged. RunBatch15's child-return assertion also checks keyboard interaction ownership, alongside raycasts.
Legacy RunBatch10 passes 11/11 and expanded pause/animation RunBatch15 passes 7/7, both terminal exit 0. The latter includes actual normal/paused animation coroutines in an empty Play Mode scene.
Final Linux player¶
The final Unity 6000.2.8f1 StandaloneLinux64 IL2CPP build exits 0. UTC provenance: 2026-10-25 04:15:21.942 → 04:22:01.812; source 5347e4600bb897ca1c9fa8cb80cb095f6ee0ce0a, dirty. Artifact /tmp/tinychaos-batch20-linux/TinyChaos.x86_64; GameAssembly SHA-256 27119b40cc2b03df1eba1f362fa17c677bd8d89cd570028f7c5eb9b920705dfa. The earlier successful build is retained under the initial-build log/provenance names and was never launched; it is not the final verified candidate.
The trace-enabled fresh player enters Alex/Soldier, Meadow, Normal through the real menus. An initial Space immediately after logo completion is too early for the input gate: source arms pressAnyButtonShown only after the background's half-second fade. A later observed title prompt accepts Space and advances. This input-gated interval is not classified as a reproduced main-menu freeze.
Ordinary gameplay reaches two level-ups and two deaths. The probe confirms the currently highlighted ordinary reward through Space when its actual Selecting marker appears; it does not inject experience or force death. First results: 00:40, 23 kills/score, 17 souls, damage 13. Restart confirmation opens with No focused; Return submits No and restores Play Again focus. Escape independently cancels Restart. Main Menu confirmation also cancels by its No button and by Escape. All four return to the same finished result, with no unpause/time-scale-one marker between confirmation opening and the first Yes request.
Restart Yes closes the gate and starts exactly one second arena. The new run visibly has full health, time 00:02, score/level zero, and base damage 10. Its ordinary result is 00:34, 20 kills/score, 14 souls. Main Menu Yes then closes the gate and reaches the second MainMenu initialization. Trace assertions verify exactly one request/completion for restart and one for menu return, two total arena starts, four result cancellations, and no locked-sequence warnings. The isolated encrypted save contains two plays, total play time 74, score/kills 43, and souls 31, matching these results. This is same-process retry accumulation, not a completed run after a separate-process reload.
Supplemental menu control and remaining defects¶
The initial post-return probe's quit-button click does not open the dialog; its following Escape opens it rather than cancelling it. Do not interpret the helper's optimistic completion text or screenshot filenames as passed cancellation. A separate reload probe also observes the MainMenu quit dialog's No click only selecting the button, without closing it. Source inspection finds null persistent targets on MainMenu's No (removed OpenPanel), Yes (QuitGame), and corner Exit button (PopPage); no corresponding listener setup exists in MainMenuManager/MenuView. MainMenu.unity is unchanged by this batch, so these serialized defects predate this repair. They remain under GAME-24 for the next focused menu batch, alongside Settings/Database and later-stage migration.
A final separate keyboard-only control waits for the prompt's fade/input gate, reaches MainMenu, opens its quit page with Escape, and closes it with Escape. The inspected final screenshot shows the restored menu and selected Play control. This verifies generic page entry/exit and keyboard Back without pretending the unwired mouse controls work. All three probes use one isolated child XDG profile/cache and exact executable/PID/window/active-focus/1280×720 input guards. Focus is not forced.
The primary player reaches the launcher deadline after completing the required game-over routes and is deliberately terminated: player/wrapper exit 0, elapsed 270.480 seconds. The two supplemental players are deliberately terminated after inspection, exits 0 at 31.526/32.527 seconds. Existing Discord ResultException remains NET-02; no new gameplay exception or trace cap is observed. No Editor/player remains. Raw logs, screenshots, input/focus records, save summary, and provenance remain under /tmp/tinychaos-batch20* outside Git. Windows, physical controllers/co-op, later stages, complete stage clears, and the reported Steam freeze remain unverified.
Workspace preservation¶
After completed final build exit, restore only the inserted Linux toolchain dependency entries and reviewed TimeManager serialization conversion to exact pre-run bytes, and remove generated Addressables Linux/linker metadata. Review four changed engine session preference keys and restore their pre-run byte backup. All three player probes use isolated profiles; final normal-profile paths/bytes match the original snapshot.
Five of 556 snapshotted project paths intentionally change: Meadow, Page, GameMenuManager, and two existing Editor check files. The other 551 preserve exact pre-run bytes. In Meadow, 14 existing objects/components change, no new IDs are added, and only the explicitly unused legacy result component ID 1666275999 is removed. Scene/production CRLF, required object/meta identities, unresolved audio deletion, Plastic evidence, and the nonempty Git index lock are preserved. No commit/push is attempted. Final audits pass: 364 active local document links, 52 uniquely scheduled findings, whitespace, intended source delta, exact normal profile, terminal player results, and no remaining Editor/player. The canonical Unity skill records result cancellation/hidden-input ownership and verification pitfalls; skill validation passes and the installed symlink is preserved.