Skip to content

Stabilization batch 18

Scope: GAME-02, after the owner reports gameplay continuing behind level-up cards and reward selection rejecting input. Repair the existing reward flow; no reward redesign, new upgrade, or input feature.

Cause and repair

RewardRoller sets GameStateService.IsRewarding, but the setter did not apply time scale. UpgradeSelection, dash, weapon, and other legacy gameplay consumers read GameManager.isPaused, which exposed only the separate menu-pause flag. Reroll explicitly rejected that flag. The result was visible cards with continuing simulation and inactive selection gates.

SetRewarding now applies the existing combined time-scale policy on both entry and completion. The legacy GameManager.isPaused getter includes reward pause, so the existing selection and gameplay-input gates agree. Its setter still changes only menu pause. Reroll checks that underlying menu-pause flag instead of rejecting reward pause. Queued rewards wait behind menu pause, avoiding reward UI over the pause menu. Completion preserves an independently active menu pause or game-over state.

No scene, save format, upgrade table, card layout, controller mapping, or rarity rule changes. GAME-09's player-slot risks remain separate.

Regression checks

New Editor-only RewardFlowChecks partial runner, RunBatch18, uses an empty Play Mode scene with inactive data-only references. The production GameManager/RewardRoller coroutines run on an active but disabled manager; real gameplay Start/Update, saves, Steam, and services are not started. Null audio clips avoid external audio setup. Restore singleton references, time scale, and background policy on exit.

The fixture deliberately uses empty reward pools to isolate the common state transitions for all three existing reward types. A stand-in card then exercises actual marker movement, selection lock, confirmation, upgrade-count mutation, UI cleanup, and ResumeGame. This is not evidence for pool generation, real keyboard/gamepad dispatch, two-player selection, or all upgrade effects.

Original final harness: 9/17 pass, Editor terminal exit 1. The initial fixed-delay draft produced 8/17; its first display wait was too short during Editor startup. It is superseded by the same final before/after harness waiting for actual Selecting state with a bounded deadline. Original display checks only assert reaching Selecting; the initial log label mentioning zero time scale is inaccurate. Entry/time-scale assertions separately reproduce the failure.

Repaired: 17/17 pass, Editor terminal exit 0. Re-run the existing RunBatch15 pause/animation checks: 7/7 pass, exit 0. Its reward-admission assertion now checks the underlying menu-pause flag, preserving the intent that a reward must not open a pause-menu page; the legacy getter deliberately includes reward pause after this repair. No production pause-menu routes change.

Unity Version Control configuration/shutdown exceptions and the headless Localization GameView toolbar exception remain Editor package diagnostics, separate from passing/failing assertions. The first fixture draft's controller-less Animator warnings are removed by using the existing chest controllers in the final fixture.

Linux player

Unity 6000.2.8f1 builds StandaloneLinux64 IL2CPP successfully; CLI terminal exit 0. UTC provenance: 2026-10-24 18:55:19.653 → 19:01:54.106. Source 5347e4600bb897ca1c9fa8cb80cb095f6ee0ce0a, dirty. Artifact /tmp/tinychaos-batch18-linux/TinyChaos.x86_64; GameAssembly SHA-256 da91243aad91f21935e2626eb57c145d0bdb9484963c876973d34f7b40d5c6f0.

An isolated fresh profile enters Alex/Soldier, Meadow, Normal through the visible menus. Ordinary keyboard movement collects dropped experience; no injected experience, invulnerability, or debug-driven reward is used. The first level-up shows three real pool-generated cards at game time 00:35. Screenshots 31.647 seconds apart show unchanged time, health 28, score 20, and enemy positions behind the cards. Two D presses move the P1 marker from Stamina Bonus to Damage Bonus. Space confirms: cards disappear, displayed damage increases 10 → 17, score advances to 22, and the timer reads 00:37. Later ordinary death reaches a visible 00:39 result with damage 17, score/kills 25, and NewPlayer. No new gameplay exception is logged; the existing Discord constructor error remains NET-02.

Screenshots/input logs remain under /tmp/tinychaos-batch18*. Every input/screenshot checks the exact candidate executable, sole PID/window, active focus, and 1280×720 size before acting; focus is never forced. The launcher's continuous focus record covers only 19:02:15.175–19:03:54.273 UTC (196/199 focused samples), ending before reward observation. Do not describe that partial record as continuous foreground evidence for the whole run or as freeze-performance validation. The wrapper eventually reports exit 143; the candidate remains available for the recorded reward checks and is deliberately stopped by its verified PID afterward. Final process inspection finds no candidate or Editor. No game crash is inferred from deliberate shutdown.

Real-player reroll, chest/boss rewards, repeated rewards/runs, physical controllers, co-op, and Windows IL2CPP remain acceptance checks. The common state/coroutine fixture covers all three types and reroll, but does not substitute for these integration checks. This batch resolves the reported one-player level-up symptom locally; it does not certify all reward-content behavior or the reported Steam/Windows menu freeze.

Workspace preservation

After terminal build exit, review and restore only the inserted Linux toolchain entries to exact pre-run package bytes; remove the three generated Addressables Linux/linker metadata files. Play Mode changes four normal-profile engine session keys; compare those XML fields and restore the saved original bytes. The standalone uses child-only XDG config/cache roots. Final normal-profile paths/bytes match the pre-run snapshot.

Of 550 snapshotted project paths, only GameManager, GameStateService, RewardRoller, and the existing pause-check assertion differ; the other 546 retain exact pre-run bytes. New RewardFlowChecks.cs and its new metadata are intentional Editor-only additions. Production CRLF, existing scene/meta identities, TimeManager, unresolved audio deletion, Plastic evidence, and the nonempty 655360-byte Git index lock are preserved. Documentation and the canonical personal Unity skill are updated; skill validation passes and its installed symlink remains intact. No commit/push is attempted.