Files
settled-reach/docs/sprints/sprint-36/server.md
T
jpmschweitzerandClaude Sonnet 4.6 25bb54bc43 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>
2026-04-19 11:08:15 +02:00

93 lines
6.1 KiB
Markdown

# 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
```