Phase 3 launch sprint. 13 tickets across server, client, copy. Atlas generation pipeline (terrain_reference, generate_atlas.py, Gemma naming), brand layer DB schema, Atlas implant panel (3 levels + heightmap viewer + overlays), hand-authored templates for Lendel + 4 core systems, brand corp TOML, brand_templates.toml (120-130 archetypes), wiki glossary, world seed wiring. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
5.1 KiB
Sprint 35: Atlas — Integration and Sprint Proof
Goal: Launch Phase 3 — build the atlas generation pipeline (terrain-aware city placement, Gemma naming), lay the brand layer DB schema, and open the Atlas implant in the client. By end of sprint, a player can open the Atlas, navigate to any inhabited body, and see a heightmap with generated city markers.
Pre-Sprint Checklist
These must be confirmed before implementation work begins:
| Item | Owner | Status |
|---|---|---|
terrain_reference column exists in bodies table |
server (Tyre) | Verify schema before #839 |
markers.json schema confirmed (D-191 section 8) |
server+copy | Align before #832 and #837 start |
Gemma 2 (sr-voice binary) reachable from tooling/planet-gen/ |
server (Dudley) | Check before #833 |
| Copy completes #837 (hand-authored templates) before server runs #833 | copy+server | Coordinate timing — Gemma needs few-shot examples |
brand_products schema confirmed between server (#827) and copy (#830) |
server+copy | Avoid data duplication: tier1.toml = corp identity; brands.toml = product records |
Cross-Team Dependencies
Copy #837 (hand-author Lendel + 4 systems) ──► Server #833 (Gemma naming — uses as few-shot examples)
Server #839 (terrain_reference) ──► Server #832 (generate_atlas) ──► Server #833 (Gemma naming) ──► Copy #838 (review)
Server #832/#833 data ──► Client #835 (heightmap viewer — populate markers)
Client #834 (atlas panel nav frame) ──► Client #835 ──► Client #836 (overlays)
The critical path is: #839 → #832 → #833 → #838. Copy should complete #837 in the first week so server can use those templates in the naming pass.
Sprint Completion Proof
The sprint is done when all of the following are observable:
- Navigation chain end-to-end: Open the Atlas implant (keyboard shortcut). Select a system from the picker. Click a planet body. See the heightmap viewer. Back-navigate to system, then to Reach map. All three levels work without error.
- Heightmap with markers: At least one inhabited body (Lendel or Sova) displays city markers, roads, and railroads on the heightmap. City names are non-null.
- City data panel: Click a city marker. A sidebar panel opens showing city name, population tier, currency zone, shadow economy zone, and gate distance. An "Economics" link is present.
- Economics cross-link: Click the economics link in the city data panel. The Economics Monitor opens, pre-filtered to that body's system. (Phase 2 panel, Sprint 34 deliverable — this tests cross-panel navigation.)
- Overlays present: The 9 MVP overlay toggles are visible in the regional view. At least 5 always-on overlays render. 4 locked overlays show greyed-out with tooltip. No errors on toggle.
- Brand schema in DB:
brand_products,brand_inputs,system_fiscal,corp_financial_state,corp_lifecycle_eventstables exist inserver/data/systems.db. The 4 canonical brand corps (Calloway, VGV, thrds, Bífröst) appear as demand nodes. - World seed wired: Server logs show the econ sim initialized with a non-zero seed value derived from
StartupMessage. - Wiki glossary live:
wiki/glossary.mdexists and is linked from wiki index.
Test Plan
| Test | Method | Who |
|---|---|---|
| Atlas navigation (all 3 levels) | Manual: open game, open Atlas, navigate down and back | Hoshe |
| Heightmap pan/zoom + marker overlay | Manual: drag, scroll, verify markers render at correct lat/lon | Hoshe |
| City data panel fields | Manual: click 3+ cities across different systems | Hoshe |
| Economics cross-link | Manual: click link, verify panel opens pre-filtered | Hoshe |
| Overlay toggles | Manual: toggle each of the 4 toggleable overlays, verify greyed state of locked | Hoshe |
generate_atlas.py determinism |
Run twice with same seed, diff output — must be identical | Dudley |
| Brand tables in DB | tooling/db/sqlite-query "SELECT COUNT(*) FROM brand_products" |
Dudley |
| Seed in server log | grep "econ.*seed" server.log — must show non-zero value |
Dudley |
| TOML sync (D-182) | make economy-db must pass without name-mismatch errors after #827 + #830 land |
Dudley |
Open Questions to Resolve Early
None blocking. The Phase 3 design is fully specified in D-191. If the sr-voice batch interface needs changes to support the naming prompt format, Dudley should flag that before starting #833 (not a blocker for #832).
Notes
#838(copy review of generated atlas) may not complete fully within the sprint if the generation pipeline runs late — partial completion is acceptable. Track which bodies were reviewed.#836(overlay system) is medium priority. If client time is tight,#834and#835are the critical deliverables — overlays can carry to Sprint 36 if needed. Check with Jeroen before deferring.- Sprint 36 brand tail:
#828(author 120-170 notable brands) and#829(generate_brands pipeline) are intentionally deferred. They depend on#827(schema) +#831(templates) completing this sprint.