Hardening for Steam Early Access
Two weeks out from Steam Early Access. The last month has been a long, methodical bug hunt — twenty-nine consecutive patch passes (v0.16.7 through v0.16.35) tightening every place where the simulation could lie to the player, drop state across a save, or quietly stack a modifier twice.
The biggest catch was a generation-repeat ghost that had haunted the project for months. Combat and Crucible scenes diverted from the generation-advance flow, then resumed it — and on resume, generation was being incremented twice, mutation pressure was decaying twice, agendas were regenerating, and near-death scarring was getting wiped. The fix was a single missing guard. The follow-up was a structural sentinel test that line-walks the source file to make sure that guard never disappears again.
- Generation-repeat bug squashed and locked down with regression + structural-sentinel tests
- Steam SDK call sites aligned to Solar2D's actual steamworks API (getUserStatValue / setUserStatValue / storeUserStats)
- Doctrine modifiers now bootstrap on save load — no more first-matchmaking running at default values
- End-of-run race conditions fixed: end_run before delete_save in victory and death-knell paths
- Religion, Reliquary, and Doctrines.adopt all idempotent at the source, not just at the consumer
- Three nil-chain crashes hardened in event_engine, proc_gen/event_assembler, and council eligibility
- Application-suspend now auto-saves on mobile so an OS-kill can't destroy a run
- Test totals: 124 genetics + 522 world + 184 bonds + 54 combat + 74 integration = 958