Skip to content

Batch 25 · Tutorial menu ownership and safe cancellation

Scope and implementation

GAME-24 and ARCH-01. Follow the owner's gameplay-completion and broad-cleanup direction; GAME-01 investigation remains deferred. Move Tutorial pause/menu ownership out of TutorialManager into TutorialMenuController and reuse the existing MenuController/Page stack. TutorialManager retains lesson progression, actors and gate/scene transitions; TutorialPlayer reads menu ownership for its pause gates. Remove the old panel array, dual active-panel pointers, duplicated pause booleans and legacy navigation methods instead of retaining forwarding handlers.

Migrate all four Tutorial GamePanel records to Page while preserving their object IDs and layout. Activate the page objects for Awake initialization and use CanvasGroups to hide/block them. Rebind Settings, Credits, return confirmation and No directly to their current owner; keep retry/confirmed return on guarded TutorialManager transition methods. Return defaults to No. Credits belongs under Settings, so Back restores Settings before the pause root; returning from a child preserves pause and initiating focus. Resume clears the stack and hidden selection; scene transitions restore the clock and reject repeat requests.

Verification in progress

Before production edits, two requirements fail: safe default cancellation and a single shared navigation owner (0/2). The first probe's focus lookup names the wrong object; exclude that probe as fixture setup error. Correct it to ConfirmBackToMenuPanel and rerun against the unchanged implementation: 0/2. Final extended checks pass 6/6, terminal Editor exit 0: imported ownership/safe focus, routes, repeated root pause/resume, child No/Back/nested Credits focus, entry-gate rejection and one transition admission.

Two intermediate extended runs pass 5/6 because the test invokes Credits outside its actual Settings/Control tab hierarchy. Inspect the serialized hierarchy, give Credits its proper Settings parent, and expose its actual tab in the fixture before dispatching it. Do not classify hidden-control fixture invocation as a reproduced game failure.

Updated legacy regression passes 11/11, terminal exit 0. It now verifies Tutorial's migrated pages and routes rather than requiring the deleted legacy API. An initial Settings regression invocation omits -tinyChaosTrace and fails its trace-count assertion (6/7); this is an invocation error, not evidence that a runtime setting is broken. The trace-enabled rerun passes 7/7 with terminal exit 0. A Linux IL2CPP trial build succeeds (2026-10-25 15:22:22.235–15:28:52.250 UTC, source 5347e460 dirty; GameAssembly SHA-256 0cab5b054982ef49527d0131ba03a16d351c38cddeceb3508e6641ac12a432f4).

Interrupted player verification

The isolated trial reaches Tutorial, opens pause/Settings, and opens Credits by mouse; Back restores Settings and the pause root. The return dialog visibly defaults to No. Keyboard submission on the Other tab does not open Credits: its firstSelectedObject is null. Correct that existing tab binding to the Credits button and strengthen the fixture to require automatic selection. The delivery check after this correction passes 6/6, terminal exit 0.

Subsequent trial input is rejected by the focus guard because another application has focus. No input is sent to that application. The waiting return helper times out; this is an incomplete input probe, not a reproduced return failure. Stop only the owned trial launcher, recording launcher-signal-15 / 154.959 seconds / cleanup exit 0. This is not a natural application quit. The trial artifact predates the final focus binding; retain its separate provenance and do not call it the final verified build.

Work is interrupted at this point. A build containing the final tab-focus correction, actual keyboard Credits entry/cancellation, retry, repeated Tutorial return and natural quit remain to be verified. No Editor/player remains running at the status check. Reviewed toolchain-only additions and TimeManager serialization changes from the completed Editor checks have been restored to pre-run bytes; the normal player profile remains byte-exact.

Preservation and next work

Exact pre-run source/settings/profile snapshot is outside the repository at /tmp/tinychaos-batch25-before-files.json and /tmp/tinychaos-batch25-profile-before.json. Preserve all existing uncommitted batches, missing audio, Plastic evidence, preexisting Addressables Linux.meta and nonempty index lock. No commit/push or normal save mutation is authorized by this batch. Restore only reviewed probe-generated edits after the Editor exits.

Batch remains incomplete until its Linux player flow and final preservation checks finish. Remaining controller-refresh destination/label, MainMenu prompt reachability, Database and later-stage migrations remain separate work. This batch does not claim full Tutorial completion, co-op/controllers, full released-stage playthroughs or Windows validation.

Owner-directed scheduling change · 2026-10-25

The owner chose to audit/design the shared gameplay rebuild before more implementation. Park this incomplete Tutorial batch and preserve its edits/evidence. Its closure is no longer the default next task; assess retain/rework during shared-system/Tutorial integration under the active plan. Do not call it verified or discard it simply because the sequencing changed.