chore(meta): plan Sprint 36: Forge
Sprint goal: close Phase 3 Atlas (unified nav chain, brand corps, content refinement) and establish Phase 4 foundations (bookmark system, location-culture resolution, character creation skeleton). 15 tickets assigned across server (7), client (5), copy (3). Briefings written for all four teams. DB backup updated. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Sprint 36: Forge — Server Tasks
|
||||
|
||||
**Goal:** Close Phase 3 Atlas (unified nav chain, brand corps, content refinement) and establish Phase 4 foundations (bookmark system, location-culture resolution, character creation skeleton).
|
||||
|
||||
**Branch:** `sprint-36/server`
|
||||
**Agents:** Dudley (dev), Tyre (arch), Hoshe (QA)
|
||||
|
||||
## New Tickets
|
||||
|
||||
| # | Title | Blocked by |
|
||||
|---|-------|------------|
|
||||
| #826 | Thread world seed into economy simulation | — |
|
||||
| #827 | Add brand_products, brand_inputs, system_fiscal schema + Phase 2 demand stubs | — |
|
||||
| #679 | Location-to-culture resolution system | — |
|
||||
| #614 | Bookmark definition system | — |
|
||||
| #829 | Build generate_brands pipeline — 10K minor brands from templates | — |
|
||||
| #848 | Retire v0.1 PoC NPC system and content/global/ | — |
|
||||
| #842 | Clean out orphaned NPC and environment interaction systems | — |
|
||||
| #726 | Configure cargo deny.toml for license and advisory checking | — |
|
||||
| #636 | Migrate bincode v1.x to v2.x | — |
|
||||
|
||||
Use `tooling/db/ticket show <id>` for full details.
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- `decisions/content.md` — D-128 (culture implicit in starting location), D-115 (character creation scoped to skills + bookmark)
|
||||
- `decisions/scope.md` — D-117 (tycoon is the bookmark), D-115 (bookmark definition)
|
||||
- `decisions/economics.md` — D-189 (brand layer architecture), D-190 (brand volume calibration), D-185 (brands are not commodities)
|
||||
- `decisions/rejected.md` — R-012 (NPC ambient interaction system scrapped)
|
||||
|
||||
## Notes
|
||||
|
||||
**#679 — Location-to-culture resolution system**
|
||||
- No culture resolution code exists in `server/src/`. This is greenfield.
|
||||
- D-128: culture is implicit in the starting bookmark location — Van Maanen's Star start = Van Maanen's Star culture. The server needs a function that takes a location identifier and returns a culture tag.
|
||||
- Blocks #680 (client location picker) and #621/#681 (downstream character init). Implement as a clean public function in a new module (e.g. `server/src/knowledge/culture.rs` or `server/src/settings/culture.rs`) — the client ticket depends on the type being stable.
|
||||
- Input: location/system id string. Output: culture tag. Source of truth: `server/data/systems.db` (geographic_sector → corridor → culture mapping).
|
||||
|
||||
**#614 — Bookmark definition system**
|
||||
- No bookmark code exists. Greenfield.
|
||||
- A bookmark = skills + starting state + context. Tycoon is the first bookmark. Must define a data structure that the character creation screen (#618) can consume.
|
||||
- D-115: character creation is limited to skills + bookmark for now. Family, culture, religion are deferred.
|
||||
- Blocks #618 (client CK3-style character creation). Define the bookmark type and expose it via the bridge so the client can enumerate bookmarks.
|
||||
- Coordinate with Tyre on the struct shape before Stig starts #618.
|
||||
|
||||
**#829 — Build generate_brands pipeline — 10K minor brands from templates**
|
||||
- New Rust binary in `server/src/bin/`. Model the existing `server/src/bin/generate_corporations/` for structure.
|
||||
- Reads `content/brands/brand_templates.toml` (authored in Sprint 35 #831). Generates 10,000 minor brand product rows.
|
||||
- D-189: 8 brand categories (terroir, heritage_craft, tech_premium, cultural, service_premium, commodity_branded, design_heritage, institutional). D-190: population-relative calibration — scale to ~80B Reach population.
|
||||
- Output writes to `server/data/systems.db` brand_products table (schema in #827). Coordinate with #827 to ensure schema is in place first.
|
||||
- Corridor-specific procedural name generation should reuse the existing naming infrastructure (`server/src/bin/generate_corporations/names.rs`).
|
||||
|
||||
**#848 — Retire v0.1 PoC NPC system and content/global/**
|
||||
- R-012: the entire NPC ambient interaction model is scrapped. `server/src/npc/` contains the v0.1 PoC modules.
|
||||
- `content/global/` does not currently exist in the repo — confirm before deleting. Check `server/src/npc/` for live integration points before removing: `server/src/simulation/mod.rs` references several npc modules (vision, awareness, etc.).
|
||||
- Coordinate with #842 — both tickets touch the same area. Recommended order: #842 first (audit scope), then #848 (retire). Or assign both to same agent and do together.
|
||||
- Do NOT delete any code that is referenced by non-NPC simulation paths. Check `server/src/simulation/ticker.rs` and `server/src/tick_phases.rs` for what is currently active in the tick loop.
|
||||
|
||||
**#842 — Clean out orphaned NPC and environment interaction systems**
|
||||
- Companion to #848. Scope: `server/src/npc/` orphaned modules, any `content/` directories with overheard.ron or zone-type conversation pools.
|
||||
- R-012 is the authoritative reference. Cross-check against `server/src/simulation/mod.rs` to identify what is actually still wired up vs. dead code.
|
||||
- After cleanup, `server/src/npc/` should contain only modules that are actively used by non-scrapped systems.
|
||||
|
||||
**#726 — Configure cargo deny.toml for license and advisory checking**
|
||||
- `cargo-deny` is installed but there is no `deny.toml` in `server/`. The CI check is failing because of this.
|
||||
- Allowed licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, Unlicense, Zlib, CC0-1.0.
|
||||
- Also configure advisory DB (RUSTSEC advisories). Target path: `server/deny.toml`.
|
||||
|
||||
**#636 — Migrate bincode v1.x to v2.x**
|
||||
- `server/Cargo.toml` has `bincode = "1"`. RUSTSEC-2025-0141 flags v1.3.3 as unmaintained.
|
||||
- bincode v2.x has a different API — encode/decode functions changed. Grep all usage sites before upgrading: `grep -r "bincode::" server/src/`.
|
||||
- `server/src/bridge/` is the most likely consumer (IPC serialization). Verify v2 compatibility before bumping the version pin.
|
||||
- Low priority — no active vulnerability, no player-facing impact.
|
||||
|
||||
## Dependency Chain
|
||||
|
||||
```
|
||||
#827 (brand schema) → #829 (generate_brands pipeline)
|
||||
#679 (location-culture) → [unblocks #680 client]
|
||||
#614 (bookmark system) → [unblocks #618 client]
|
||||
#842 (audit NPC orphans) → #848 (retire NPC system) [coordinate together]
|
||||
#726, #636, #826, #827 → standalone, parallel
|
||||
```
|
||||
|
||||
## PR Workflow
|
||||
|
||||
```bash
|
||||
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
|
||||
--title "feat(server): sprint 36 — bookmarks, brands, NPC cleanup" \
|
||||
--description "body" \
|
||||
--base main --head sprint-36/server
|
||||
```
|
||||
Reference in New Issue
Block a user