EPIC: Unify P0 — Persistent Universe Foundations #926

Closed
opened 2026-08-06 16:11:56 +00:00 by spikerj · 1 comment
Owner

Part of the Game Unification lane: all games become one game — different modes over one shared persistent universe (space → scan → hex-TD conquest → voxel base → satellite logistics → dungeon portals). Clients = Angular web + Godot (iOS/Android embed Godot). Full plan: ~/.claude/plans/i-want-a-plan-breezy-eclipse.md on the 4090.

Fix the dead persistence paths and stand up minimal protocol codegen; no new gameplay.

Key defect: GameEventsConsumer.cs:161-162 binds only persistence.#+character.#, so planet.*/star.*/moon.* publishes are silently dropped — planets have NEVER persisted; the universe regenerates every cold start. Voxel chunk persistence (GameVoxelWorld/GameVoxelChunk, RedisVoxelCache) exists as dead code.

Playable when done: restart the gameserver and the same planets come back; a placed voxel block survives.

Tickets


Child issues (per-repo, auto-close on merge)

This epic is complete when every box below is checked. Each child lives in the
repo that holds its fix, so fixes #N in a PR closes it automatically.

Backend

Angular

Godot

Checklist generated by the umbrella-tracker migration, 2026-08-07 — Opus 5 Agent

Part of the **Game Unification** lane: all games become one game — different modes over one shared persistent universe (space → scan → hex-TD conquest → voxel base → satellite logistics → dungeon portals). Clients = Angular web + Godot (iOS/Android embed Godot). Full plan: `~/.claude/plans/i-want-a-plan-breezy-eclipse.md` on the 4090. Fix the dead persistence paths and stand up minimal protocol codegen; no new gameplay. Key defect: `GameEventsConsumer.cs:161-162` binds only `persistence.#`+`character.#`, so `planet.*`/`star.*`/`moon.*` publishes are silently dropped — planets have NEVER persisted; the universe regenerates every cold start. Voxel chunk persistence (`GameVoxelWorld`/`GameVoxelChunk`, `RedisVoxelCache`) exists as dead code. **Playable when done**: restart the gameserver and the same planets come back; a placed voxel block survives. ### Tickets - [ ] #934 - [ ] #935 - [ ] #936 - [ ] #937 - [ ] #938 - [ ] #939 - [ ] #940 - [ ] #941 <!-- BEGIN MIGRATED-CHILDREN --> --- ## Child issues (per-repo, auto-close on merge) This epic is complete when every box below is checked. Each child lives in the repo that holds its fix, so `fixes #N` in a PR closes it automatically. **Backend** - [ ] spikerj/spikersoft-backend#547 — Residual stealth leak: DamageDealt/HealthManaUpdate/beam/projectile channels expose entity ids of undetected ships <sub>(was #982)</sub> - [ ] spikerj/spikersoft-backend#581 — [BE] Make CelestialBodyManager default-creation idempotent (Redis→Mongo→generate-once) <sub>(was #935)</sub> - [ ] spikerj/spikersoft-backend#582 — [BE] Wire voxel chunk persistence (RedisVoxelCache + voxel.# + GameVoxelChunk) <sub>(was #936)</sub> - [ ] spikerj/spikersoft-backend#583 — [BE] Protocol schema + codegen: game-protocol.yaml → C# + TS generated files <sub>(was #937)</sub> - [ ] spikerj/spikersoft-backend#584 — [BE] 5-character account cap in HandleCreateCharacterCommand <sub>(was #938)</sub> - [ ] spikerj/spikersoft-backend#585 — [BE] Persist BodyType/ResourceSeed/SurfaceTemperatureK/Difficulty on Planet at generation <sub>(was #941)</sub> **Angular** - [ ] spikerj/spikersoft-angular#657 — [NG] Surface the 5-character cap in character creation UI <sub>(was #939)</sub> **Godot** - [ ] spikerj/spikersoft-games-godot#12 — [GD] Surface the 5-character cap error <sub>(was #940)</sub> <sub>Checklist generated by the umbrella-tracker migration, 2026-08-07 — Opus 5 Agent</sub> <!-- END MIGRATED-CHILDREN -->
spikerj added the agenticenhancement labels 2026-08-06 16:11:56 +00:00
spikerj added the epic label 2026-08-07 13:43:02 +00:00
Author
Owner

Dissolved into per-repo issues as part of the umbrella-tracker breakup.

This epic could never auto-close from a merge, because Gitea only resolves
fixes #N within a single repo. Its work now lives where the code is:

Backend

Angular

Godot

Already shipped — verified against master and live prod during the migration, no issue filed:

The unit is tracked by the shared [Unify P0] title prefix and by sibling
cross-links in each issue body. Closing here — the umbrella tracker is being
emptied.

— Opus 5 Agent

Dissolved into per-repo issues as part of the umbrella-tracker breakup. This epic could never auto-close from a merge, because Gitea only resolves `fixes #N` within a single repo. Its work now lives where the code is: **Backend** - spikerj/spikersoft-backend#547 — Residual stealth leak: DamageDealt/HealthManaUpdate/beam/projectile channels expose entity ids of undetected ships - spikerj/spikersoft-backend#581 — [BE] Make CelestialBodyManager default-creation idempotent (Redis→Mongo→generate-once) - spikerj/spikersoft-backend#582 — [BE] Wire voxel chunk persistence (RedisVoxelCache + voxel.# + GameVoxelChunk) - spikerj/spikersoft-backend#583 — [BE] Protocol schema + codegen: game-protocol.yaml → C# + TS generated files - spikerj/spikersoft-backend#584 — [BE] 5-character account cap in HandleCreateCharacterCommand - spikerj/spikersoft-backend#585 — [BE] Persist BodyType/ResourceSeed/SurfaceTemperatureK/Difficulty on Planet at generation **Angular** - spikerj/spikersoft-angular#657 — [NG] Surface the 5-character cap in character creation UI **Godot** - spikerj/spikersoft-games-godot#12 — [GD] Surface the 5-character cap error **Already shipped** — verified against master and live prod during the migration, no issue filed: - spikerj/spikersoft-issues#982 (complete) The unit is tracked by the shared `[Unify P0]` title prefix and by sibling cross-links in each issue body. Closing here — the umbrella tracker is being emptied. — Opus 5 Agent
Sign in to join this conversation.