Stabilization batch 12¶
Scope: GAME-13's observed logo-skip startup stall. Change SplashUIController and extend the existing Editor-only coroutine checks. No feature, scene/asset, save, dependency, input-mapping, or graphics-policy change.
Confirmed cause and repair¶
The logo sequence yielded a child Coroutine handle. SkipCurrentLogo stopped that child, leaving the parent waiting rather than reaching its completion flag and ready screen. Real Play Mode reproduces this during fade-in, display, and fade-out, as well as repeated/multiple skip requests. The normal sequence completes.
The parent now yields the logo iterator directly. Each phase uses a short frame-by-frame wait that retains scaled-time timing and exits when the existing skip flag is set. Skip still kills the current visual tween and hides its image, but the child exits normally so the parent can advance. The obsolete child handle is removed. Startup-task gating and the existing ready/menu transition remain in place; no timeout bypass or dependency-ready claim is introduced.
Controlled regression evidence¶
RunBatch12 enters an empty Play Mode scene, creates two temporary logo/UI fixtures, and invokes the actual production sequence/skip methods. It does not initialize real game services, saves, scenes, or online integrations. Background/player-loop updates remain enabled for the probe. The final comparison uses a fixed 1/60-second capture step only in this correctness fixture; time scale, capture delta, and background policy are restored. Those timings are not a performance benchmark.
Launch the matching Editor directly without -quit; the asynchronous runner owns exit:
/home/freightpx/Unity/Hub/Editor/6000.2.8f1/Editor/Unity \
-batchmode -nographics \
-projectPath '/mnt/work/Unity Project/Tiny-Chaos' \
-buildTarget Linux64 \
-executeMethod TinyChaos.EditorTools.StabilizationChecks.RunBatch12 \
-logFile /tmp/tinychaos-batch12-final-after.log
| Case | Original | Repaired |
|---|---|---|
| Normal two-logo sequence; startup-task gate and ready screen | Pass | Pass |
| Skip during fade-in | Parent remains waiting | Pass |
| Skip during display, after fade-in | Parent remains waiting | Pass |
| Skip during fade-out | Parent remains waiting | Pass |
| Repeated request for the same logo | Parent remains waiting | Pass |
| Skip both logos in order | Parent remains waiting at first skip | Pass |
| Total / Editor exit | 1/6, exit 1 | 6/6, exit 0 |
The fixture verifies immediate hiding, bounded parent advancement, remaining-logo progression, startup-task gating, and final readiness. Stimulus logs identify opacity/time/frame; the display case is explicitly beyond fade-in. Initial checks reproduced the failure; one repeat's normal control timed out under variable headless clock progress, so a controlled capture step was added before the final same-harness comparison. Phase controls were tightened and both original/repaired sources rerun. Final raw logs remain outside Git at /tmp/tinychaos-batch12-final-before.log and /tmp/tinychaos-batch12-final-after.log.
Player verification¶
The Linux IL2CPP build succeeded with terminal exit 0. Provenance records Unity 6000.2.8f1, StandaloneLinux64, revision 5347e4600bb897ca1c9fa8cb80cb095f6ee0ce0a, dirty. Build UTC start/end on 2026-10-24: 08:41:13.522 / 08:49:29.837. Artifact /tmp/tinychaos-batch12-linux/TinyChaos.x86_64; GameAssembly SHA-256 af25a255299676d9fe1ffaab5f79a20d0adeddb3fdd8a52fb7132fde4f1fee8f.
Two separate fresh/offline profiles were created under /tmp/tinychaos-batch12-normal-profile and ...-skip-profile. The temporary development-only Steam app-ID file prevented launching an installed Steam copy; it must not ship. A bounded temporary X11 driver verified candidate executable, PID, window ownership, active focus, and dimensions before input. The skip control sent 37 early Space pulses, stopping when startup/skip markers appeared, rather than assuming input timing. Both controls then sent one ready-screen Space press, captured the visible menu, and deliberately stopped the candidate.
| Actual player result, UTC | Normal control | Controlled skip |
|---|---|---|
| Logo sequence started | 08:50:04.828 | 08:50:22.396 |
| Skip marker | None | 08:50:22.524, before all-tasks-complete at 08:50:22.526 |
| Logo sequence completed | 08:50:08.176 | 08:50:22.752 |
| Logo interval | 3.348 seconds | 0.356 seconds; 0.228 seconds after skip |
| Focus samples during logo interval | 7/7 focused | 1/1 focused; each injected input also independently guarded |
| Menu initialization | 08:50:11.852 | 08:50:26.394 |
| Visible menu / terminal driver result | Pass / exit 0 | Pass / exit 0 |
The runtime skip marker confirms the affected branch actually executed. Unlike batch 11's 88.578-second incomplete skip interval, this candidate completes the logo/task/ready/menu path. Raw logs, screenshots, input records, focus samples, provenance, and sanitized summary stay outside Git under /tmp/tinychaos-batch12*.
Each launch still logs the existing Discord constructor InternalError (NET-02). The normal control also reproduces the changelog HTTP 404 (CONTENT-09); its absence before stopping the shorter skip run does not resolve that feed. No missing-script warnings or other exceptions appear in these bounded launches. These are startup passes, not complete runs or Windows/Steam equivalence. The owner's reported freeze remains open pending affected-build evidence; other dependency-failure recovery paths under GAME-13 remain unverified.
Preservation and next work¶
After the Editor/build ended, review and restore only the automatic Linux toolchain insertion and generated Addressables linker/Linux metadata. TimeManager already matches its pre-run bytes; no conversion persisted in this Play Mode batch. All 57 non-scope paths in the 59-path snapshot, including every scene, retain exact pre-run bytes. The normal profile held only Unity's prefs file before and after; its hash changed during the Editor/Play Mode work. Its keys are engine session/cloud/toolchain/quality/addressables preferences, with no game save/config files present. Only a before-hash was captured, so an exact value comparison/restoration is unavailable; retain the current file rather than overwriting unknown settings. The two actual player profiles remain isolated. This is an engine-preference write, not a claim that the whole normal profile stayed unchanged. Current preference bytes and a sanitized audit are backed up under /tmp/tinychaos-batch12-*; the workflow now requires before-bytes for future Play Mode checks. Unknown audio deletion, Plastic corruption evidence, and the nonempty Git lock remain preserved. No commit/push was attempted and no Editor/candidate remains running.
The personal Unity skill records cooperative coroutine cancellation and the distinction between a deterministic correctness clock and real player timing. Next acceptance work should enter character/stage selection and an actual arena run, while retaining settings-value checks, optional Discord failure/cleanup, startup dependency recovery, save compatibility, and Windows/Steam freeze verification. No feature work was included; stabilization remains unfinished.