EPIC: Unify P2 — Establish a Base (hex-TD becomes the conquest mode) #928

Closed
opened 2026-08-06 16:11:57 +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.

"Establish Base" on a scanned planet launches a hex-tower-defence match keyed by planetId; waves scale with planet difficulty; new harvester vehicle joins matter mines; victory writes conquest (owner, matchId, baseSnapshot) into the shared universe.

Position: hex-TD KEEPS its SignalR hub + twin reducer; unification is at the data layer — match completion publishes planet.conquest.completed to game.events; consumer writes Planet conquest fields + game_conquests; GameServer re-reads the Redis planet cache on zone-join/landing.

Playable when done: scan → decide → fight → own, end-to-end on web; conquest permanent + visible on mobile.

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. "Establish Base" on a scanned planet launches a hex-tower-defence match keyed by `planetId`; waves scale with planet difficulty; new **harvester vehicle** joins matter mines; victory writes conquest (owner, matchId, baseSnapshot) into the shared universe. Position: hex-TD KEEPS its SignalR hub + twin reducer; unification is at the data layer — match completion publishes `planet.conquest.completed` to `game.events`; consumer writes Planet conquest fields + `game_conquests`; GameServer re-reads the Redis planet cache on zone-join/landing. **Playable when done**: scan → decide → fight → own, end-to-end on web; conquest permanent + visible on mobile. ### Tickets - [ ] #947 - [ ] #948 - [ ] #949 - [ ] #950 - [ ] #951 - [ ] #952 - [ ] #953 - [ ] #954 - [ ] #955 - [ ] #956 <!-- 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#586 — [BE] HexTowerDefenceMatch + hub: planetId/difficulty/outcome; require scan report <sub>(was #947)</sub> - [ ] spikerj/spikersoft-backend#587 — [BE] Harvester vehicle in the C# match manager <sub>(was #949)</sub> - [ ] spikerj/spikersoft-backend#588 — [BE] Conquest completion → planet.conquest.completed → universe write <sub>(was #951)</sub> - [ ] spikerj/spikersoft-backend#589 — [BE] SpaceZone broadcasts conquest status; re-read planet cache on join/landing <sub>(was #952)</sub> - [ ] spikerj/spikersoft-backend#595 — [Unify] Wave scaling by planet difficulty; win = N(difficulty) waves — C# match manager <sub>(was #948)</sub> **Angular** - [ ] spikerj/spikersoft-angular#658 — [NG] Harvester in the TS reducer + renderer <sub>(was #950)</sub> - [ ] spikerj/spikersoft-angular#659 — [NG] Establish Base flow: scan-report HUD → hex-TD host keyed by planet <sub>(was #953)</sub> - [ ] spikerj/spikersoft-angular#660 — [NG] Conquered-planet ownership display in the space game <sub>(was #954)</sub> - [ ] spikerj/spikersoft-angular#662 — [NG] Menu collapse 1/3: remove hex-TD standalone entry <sub>(was #955)</sub> - [ ] spikerj/spikersoft-angular#703 — [Unify] Wave scaling by planet difficulty; win = N(difficulty) waves — TS reducer twin <sub>(was #948)</sub> **Godot** - [ ] spikerj/spikersoft-games-godot#13 — [GD] Establish Base button + conquest interstitial + ownership display <sub>(was #956)</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:57 +00:00
spikerj added the epic label 2026-08-07 13:43:03 +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

The unit is tracked by the shared [Unify P2] 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#586 — [BE] HexTowerDefenceMatch + hub: planetId/difficulty/outcome; require scan report - spikerj/spikersoft-backend#587 — [BE] Harvester vehicle in the C# match manager - spikerj/spikersoft-backend#588 — [BE] Conquest completion → planet.conquest.completed → universe write - spikerj/spikersoft-backend#589 — [BE] SpaceZone broadcasts conquest status; re-read planet cache on join/landing - spikerj/spikersoft-backend#595 — [Unify] Wave scaling by planet difficulty; win = N(difficulty) waves — C# match manager **Angular** - spikerj/spikersoft-angular#658 — [NG] Harvester in the TS reducer + renderer - spikerj/spikersoft-angular#659 — [NG] Establish Base flow: scan-report HUD → hex-TD host keyed by planet - spikerj/spikersoft-angular#660 — [NG] Conquered-planet ownership display in the space game - spikerj/spikersoft-angular#662 — [NG] Menu collapse 1/3: remove hex-TD standalone entry - spikerj/spikersoft-angular#703 — [Unify] Wave scaling by planet difficulty; win = N(difficulty) waves — TS reducer twin **Godot** - spikerj/spikersoft-games-godot#13 — [GD] Establish Base button + conquest interstitial + ownership display The unit is tracked by the shared `[Unify P2]` 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.