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>
6.1 KiB
6.1 KiB
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.rsorserver/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 existingserver/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.dbbrand_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. Checkserver/src/npc/for live integration points before removing:server/src/simulation/mod.rsreferences 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.rsandserver/src/tick_phases.rsfor 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, anycontent/directories with overheard.ron or zone-type conversation pools. - R-012 is the authoritative reference. Cross-check against
server/src/simulation/mod.rsto 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-denyis installed but there is nodeny.tomlinserver/. 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.tomlhasbincode = "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
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