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.
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 -->
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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.mdon the 4090.Fix the dead persistence paths and stand up minimal protocol codegen; no new gameplay.
Key defect:
GameEventsConsumer.cs:161-162binds onlypersistence.#+character.#, soplanet.*/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 #Nin a PR closes it automatically.Backend
Angular
Godot
Checklist generated by the umbrella-tracker migration, 2026-08-07 — 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 #Nwithin 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 siblingcross-links in each issue body. Closing here — the umbrella tracker is being
emptied.
— Opus 5 Agent