Batch 33 · Persistence, input preferences and UI/service integration¶
2026-10-26. One R0 source-audit/design batch. No gameplay/source/scene/prefab/package/settings/profile changes, Unity run, network request, commit or push. Earlier planning/stabilization work, unresolved audio deletions, generated Linux metadata and local Git recovery data remain preserved. Tutorial and dedicated GAME-01 work stay parked.
Deliverable¶
The persistence/input preferences/UI/service integration contract records current versus legacy profile/config paths and codec/serializer/authority, creation defaults and stable-key compatibility; proposed versioned remap profiles and semantic legacy import; load/apply/edit/write separation, validation/backup/recovery, once-only result persistence, readiness/lifetime and menu/HUD/audio/optional-service adapters. It reuses prior scene/input/combat/stage/reward bindings rather than duplicating those maps. Target ownership and safety requirements are design, not implemented fixes.
New source maps record all 27 persisted model fields, 36 preset-role references from four Bootloader control presets, 27 lexical persistence file/category rows, ten direct readiness-related event edges and 23 UI/service adapter entry points. The 24 comparison cases distinguish 12 source-derived observations from 12 proposed future requirements. No case has been executed in Unity or against profile data. The caller map explicitly limits its selected symbols; it is not a complete compiled call graph.
Findings and decisions preserved¶
The current config saves preset indices, not button remaps. Applying loaded audio and four preset selections writes config through their setters; locale application can write separately. Batch 19 already observed repeated startup writes, so this audit does not introduce a duplicate issue or identify the freeze cause. SAVE-05 moves from historical lead to source-audited lifetime/readiness risk, with repeat-init/runtime proof pending. SAVE-04 is clarified: defaults, resource load and save agree on upgradeName; catalog lookup uses idname, so changing identity requires explicit compatibility handling.
Current-file existence selects authority before validating content. Legacy discovery has different platform guards/coverage from its existence gate. The proposal preserves environment/account separation and original invalid data rather than silently overwriting or merging it. It does not execute SaveService construction, legacy decoding or reset on normal saves. Actual profile bytes were neither opened nor written.
Leaderboard GET/popularity have explicit timeouts, while POST has no assigned timeout and other parse/cache/UI-wait paths need owned failure/lifetime handling. Current result payload has two player-stat fields. Unsupported extra-player submission must be explicit; local results must not wait on the backend. No server-side admission or Windows IL2CPP result is inferred from client source. Discord's constructor failure remains NET-02, separate from GAME-01.
PS-01–PS-05 retain exact legacy-source policy, concrete package input schema/IDs and physical tests, IO recovery/platform replacement evidence, per-slice imported UI/result wiring and external integration gates. RP/SE/CA follow-ups remain in their existing contracts; no mastery/scarcity/reconnect policy was invented. The Input System package, player/AbilityHolder/shared-scene rebuild and remapping UI remain unimplemented.
Verification¶
Check unchanged source/data/settings/package snapshot and prior gameplay pins, current runtime status/HEAD; CSV declaration/GUID/role/line/hash identity, source-versus-target case labels; local documentation links, whitespace and all 53 current issue IDs routed once. These checks establish static evidence/document consistency, not imported UI wiring, actual profile compatibility or gameplay equivalence. Normal profiles are not test fixtures.
Validation passed: all 2,819 snapshotted source/data/settings/package files and 608 gameplay pins are unchanged; runtime workspace status and HEAD remain unchanged. All six CSV maps pass declaration/asset/line/hash and evidence-label checks; the 27 lexical caller rows cover 19 scripts. The 607 local documentation links, whitespace and all 53 issue IDs routed once pass. Eight new documentation files and the maintained references remain uncommitted. No runtime/profile compatibility or player test is claimed.
Next¶
Close the R0 cross-contract checklist and specify the first R1 lifecycle implementation slice: exact files/assets, development entry and no-write adapters, compatibility seam, rollback boundary and pass/fail checks. Resolve decisions needed by that slice and keep later workstream gates explicit. Avoid another general inventory or combining the full input/player/combat rebuild into the first implementation batch. Stop after this bounded documentation batch for the owner's check-in.