Skip to content

Stabilization batch 23

Scope: GAME-24's existing settings lifecycle, core controls, and Meadow Settings destination. Continue the current menu migration without new options, redesign, or restoration of obsolete manager scripts. The verified scope and remaining limitations are recorded below.

Ownership and recovered data

SettingsInterface now owns initialization after save/settings/input readiness, non-notifying value refresh, and named slider listeners with balanced removal on disable/reinitialization. It refreshes optional existing keymap displays independently of nickname availability. Tutorial's empty competing component is removed; intended Tutorial and Experimental interfaces receive their existing Apply button references. MainMenu's MenuView no longer initializes settings on behalf of other scenes.

GameSettings retains configuration/input/graphics operations and the graphics state actually applied during startup. View initialization no longer resets that state to pending choices. It emits a graphics-state notification instead of owning scene controls. Presentation helpers move to SettingsInterface, and JoystickRefreshPanel's existing caller follows that ownership. The joystick preset setter now assigns the requested preset instead of OR-ing it with the previous ID. Save formats and existing startup graphics synchronization are unchanged.

Recover only Meadow's deleted SettingsPanel hierarchy and settings-interface object from 5939579cf1800e908c1f5f9526f62a8121a78569: 399 historical records, including the 396 panel object/component IDs identified in batch 22. Reconnect them to the existing Canvas/root list, then migrate the recovered panel and tabs to current Page/TabsManager data. Preserve existing option/layout/navigation identities. Both existing Settings buttons call GameMenuManager.ShowSettings with a configured non-root options Page. The pause root gets its existing Settings button as first focus.

Migrate the existing Meadow keymap/credits child components and their callers to Page; repair MainMenu's existing P2-keymap/credits callers. These restore existing destinations rather than adding controls. Remaining legacy GamePanels in Meadow are StartPanel and Database; Database and later-stage controller migration remain separate work.

MenuController records initiating focus for pushed pages and restores a still-interactable target after parent input restoration. Page can focus its configured existing control or current settings tab, and hides an empty-elements page on exit. Tabs initialize visibility without stealing focus, accept actions only while their containing groups own input, and remember selection only within the outgoing tab. Existing quit/result owner callbacks remain in place.

Regression evidence

New synchronous Editor-only RunBatch23 initially fails 0/5 groups on original runtime source/data. Failures establish missing Meadow ownership/destination, hidden-tab focus theft, absent scene-owned initialization, and absent child-page ownership. A first post-edit attempt fails compilation because JoystickRefreshPanel still calls the moved presentation method; migrate that caller, do not retain a compatibility method in GameSettings. The next run passes 5/5.

The expanded final harness passes 6/6: all six scenes have one complete core settings interface; Meadow's two actions resolve to the current child Page; hidden tabs do not steal focus; repeated initialization loads values without config IO and preserves another listener; one actual volume edit produces exactly one temporary config write; disabling removes owned editing; reinitialization preserves unapplied graphics choices; repeated child Back stays paused and subsequent root Back resumes; imported tab, pause and result event dispatch remains valid.

The config fixture uses a disposable resolver directory and in-memory configuration, restoring singleton/audio/input references afterward. No real profile or save initialization is used. Legacy tab dispatch now explicitly makes its preview page visible; hidden behavior is checked separately. Existing batch-10 checks pass 11/11 with Meadow's expected legacy panel count updated from five to two following the three deliberate conversions. Existing batch-21 quit/configuration/focus checks pass 5/5. Each Editor process reaches terminal exit 0. These checks do not substitute for native input, graphics or scene transitions.

Player validation

The first Linux IL2CPP build succeeds, terminal exit 0. A preliminary isolated player reaches MainMenu Settings, displays loaded audio values, saves a real master-volume edit (0.5 → 0.6539589), and stages a VSync edit. It exposes stale custom switch presentation: configuration and Toggle state are correct, while the fullscreen switch retains authored ON text after a silent refresh to false. This is not a successful final-player acceptance run. Its launcher receives SIGTERM after 61.951 seconds and cleans up its owned player; do not count exit 0 from that cleanup as an actual confirmed quit. Trial build/profile/provenance/logs are preserved separately under /tmp/tinychaos-batch23-trial*.

SwitchToggle now explicitly refreshes its own presentation without notifying configuration listeners, including controls whose Awake has not run because their tab is inactive. It initializes both ON/OFF states, cancels only its owned tweens, and preserves unscaled interaction animation. SettingsInterface refreshes that presentation after loading toggle values. The final harness additionally checks visible switch text against loaded values and passes 6/6, terminal exit 0.

The second build succeeds, terminal exit 0. Its native fresh player verifies actual MainMenu values/edits, VSync Apply to 0, another staged choice carried into Meadow, one volume edit/write there (0.6539589 → 0.7539589), and paused Apply to VSync 1. Back returns to pause without resuming; another Back resumes and the HUD advances from 00:04 to 00:06. A return helper initially clicks above the actual pause-confirmation Yes button; the inspected screenshot identifies the correct (520,445) target. That click completes one arena return, and a final confirmed MainMenu quit ends the player naturally with exit 0 after 120.085 seconds. Its detached launcher remains observable beyond 60 seconds and writes authoritative terminal evidence.

Screenshots also expose four-second animation persistence in the recovered pages: this patch initially writes AnimationSpeed 0.25, but AnimFunc interprets duration as 1 / Speed. Correct the four new page values to 4 for the intended 0.25-second transition. Preserve the intermediate build/profile/provenance/screenshots under /tmp/tinychaos-batch23-stage2*; its interaction evidence is not a claim that the final scene data has been verified. A final scene-data rebuild and native checks follow.

The core-validation rebuild succeeds (UTC 2026-10-25 07:47:15.614 → 07:50:59.420), terminal exit 0, Unity 6000.2.8f1 Linux IL2CPP. GameAssembly SHA-256 is 60a2cc4fa1c9c088ce62d408b37c2eb8a7afb97d2acfdf3bae44d90994405b9b. Its fresh player repeats the complete MainMenu/Meadow edit, staged graphics, paused Apply, Back/resume and arena return flow. Inspected screenshots now show clean pause return and no settings overlay after resume. HUD time is 00:04 throughout Settings and 00:06 after two resumed seconds. The player quits naturally with exit 0 after 51.538 seconds; one arena-exit request/completion and one quit request are recorded.

A second process reloads that temporary profile with master volume 0.7539589 and enters Tutorial. Both menu and Tutorial view-ready traces report that value. Tutorial's actual sound control changes it to 0.6539589; its graphics tab shows correct OFF/ON presentation, VSync Apply completes at 0 while paused, Backspace returns to pause, and Escape resumes with the settings overlay absent. A later pause/confirmation returns to MainMenu with the edited value, and confirmed quit exits naturally with code 0 after 117.596 seconds. No exception messages, locked-sequence warning, or trace cap occur in these two core logs. This is not a general SDK/platform clearance.

A further child-menu probe verifies Meadow's P1/P2 keymap and credits pages, their visible contents/focus, and Back to Other without timer progress (00:04). It also catches an inactive MainMenu P2 page: its button now reaches Page.Enter but Awake never initialized the page while its GameObject was inactive. That probe logs one NullReferenceException and is explicitly excluded from a clean candidate claim. A subsequent helper incorrectly proceeds after that failed opening, so its first alleged MainMenu credits screenshot is the root menu, not credits evidence. Correct the P2 object's active state and configure its existing first control, then extend the harness with actual P2/credits dispatch and focus restoration. Final harness passes 7/7, terminal exit 0. The probe later returns/quits naturally (184.655 seconds) and its evidence is preserved as pre-final-menucheck.

Final delivery build: UTC 2026-10-25 08:01:32.826 → 08:04:51.045, success/terminal exit 0, source 5347e4600bb897ca1c9fa8cb80cb095f6ee0ce0a dirty, Unity 6000.2.8f1, StandaloneLinux64 IL2CPP. Artifact /tmp/tinychaos-batch23-linux/TinyChaos.x86_64; provenance /tmp/tinychaos-batch23-provenance.json; GameAssembly SHA-256 remains 60a2cc4fa1c9c088ce62d408b37c2eb8a7afb97d2acfdf3bae44d90994405b9b. Runtime C# is unchanged from core validation; the final change is MainMenu P2 scene readiness/focus.

The delivery player visibly opens MainMenu P2 twice and credits, then restores the correct initiating focus on Back. Sending E while P2 is open leaves its parent on Other when returning. It also enters Meadow and verifies P1/P2/credits contents, Back/focus with the timer held at 00:04, clean Settings/root closure, and resumed gameplay at 00:05. One arena return and one confirmed quit complete successfully; actual player exit 0 after 57.045 seconds, reason player-exited. Its log has no exception message, locked-sequence warning, or trace cap. Screenshots are inspected, rather than relying on helper completion. Final processes are terminal; raw logs, profiles, focus/input records, screenshots, intermediate candidates and provenance remain outside Git under /tmp/tinychaos-batch23*.

Preservation and remaining work

After all verification processes terminate, review and restore only generated changes to the exact pre-run bytes. Editor probes insert only the reviewed Linux toolchain entries; restore them and the known TimeManager rational-timestep conversion to pre-run bytes after terminal completion. Preserve the already-existing unchanged Addressables Linux.meta, and remove only newly generated link.xml/link.xml.meta. The baseline includes Linux.meta; deleting it merely because previous batches generated a file with that name would erase preexisting state. Preserve prior batches, unresolved audio deletion, Plastic evidence, and the nonempty Git index lock. No commit/push is attempted. The normal game-profile paths and bytes are unchanged. Fourteen existing source/scene/check files change intentionally; SettingsFlowChecks.cs and its metadata are new. Existing source line endings, unresolved deletions, Plastic evidence, and the 655,360-byte index lock remain preserved. The canonical Unity skill records the verified lifecycle, custom-toggle, animation-unit and active-destination lessons; its installed symlink is preserved and validation passes. Final audit passes 384 local documentation links, all 52 findings scheduled once, new-file metadata/whitespace, 14 intended existing source/scene/check deltas, exact normal-profile bytes and three natural player exits; no Editor/player remains running. After the delivery build, remove trailing whitespace only from 299 newly added scene-property lines flagged by Git; this changes no YAML values and does not require a player rebuild.

Limits and next work

The existing MainMenu controller-refresh action still targets removed OpenPanel, has a duplicate Player 2 label, and lacks its popup binding. AskTutorial's No action is another remaining MainMenu caller. Database and later-stage menu controllers remain unmigrated. Tutorial's return dialog still initially focuses Yes; that existing flow needs a separate focus correction. Core Settings success does not certify these callers, physical controllers/reconnection, changing keyboard/gamepad presets, full save recovery, full-screen/resolution switching, complete runs, Windows/Steam, or the reported freeze.

Startup still synchronizes current system graphics into configuration. The child-menu probe starts with the preceding process's saved VSync false and reports system VSync true after startup. This existing policy remains unchanged and means cross-process graphics preference restoration is not cleared by the volume-persistence checks. Investigate its intended behavior and timing alongside the recorded graphics/save startup work; do not infer a freeze cause or change that policy silently.

Next investigate the saved-versus-system graphics startup policy with isolated profiles and timing evidence, preserving command-line display overrides. Keep controller refresh, the remaining MainMenu prompt, Database, later-stage migration and broader input/Windows acceptance open. Stop after this batch for the owner's check-in.