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

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.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

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