Files
settled-reach/docs/sprints/sprint-4/server.md
T
jpmschweitzer 23d9ff0a58 Merge remote-tracking branch 'origin/main' into planning
# Conflicts:
#	CHANGELOG.md
#	content/_meta/README.md
#	content/_meta/npc-authoring-style-guide.md
#	wiki/_templates/cultural-group.md
#	wiki/_templates/institution.md
#	wiki/_templates/star-system.md
#	wiki/characters/devra.md
#	wiki/characters/drin.md
#	wiki/characters/harek.md
#	wiki/characters/lera-sessik.md
#	wiki/characters/maret-korr.md
#	wiki/characters/naia-tamm.md
#	wiki/characters/nils-davan.md
#	wiki/characters/pell.md
#	wiki/characters/renn.md
#	wiki/characters/resha.md
#	wiki/characters/sabel.md
#	wiki/characters/sera-venn.md
#	wiki/characters/torek-lintar.md
#	wiki/characters/voss.md
#	wiki/star-systems/krenn/index.md
2026-03-14 00:24:53 +01:00

8.8 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 4 — Server Briefing YAML content loader phase 2, enum/attribute/pool/template population, seed schema design sprint archived 4 server

Sprint 4: Feel — Server Tasks

Goal: Content conversion and authoring begins — wiki to YAML, content packs, monologue pool

Branch: server Agents: Dudley (simulation), Tyre (architecture), Hoshe (QA)

New Tickets

# Title Priority Blocked by
#408 YAML content loader Phase 2 — real content loading high #387, #388, #389, #390, #391, #398
#387 Create global/enums/ YAML files from D-035 medium
#388 Create global/knowledge/entity-attributes.yaml medium
#389 Create pools.yaml for v0.1 seed-time selection medium
#390 Create template YAML files with role slot definitions medium
#391 Create triangle YAML files for 5 v0.1 triangles medium
#394 Seed configuration schema design medium
#403 YAML → RON converter tool medium
#407 Line previewer CLI medium

Use db/connectors/ticket show <id> for full details.

Key Decisions

  • decisions/content.md — D-024 (NPC 10-axis model), D-025 (social sites), D-028 (dialogue architecture), D-035 (tag taxonomy)
  • decisions/architecture.md — D-020 (IPC protocol), D-026 (simulation tiers), D-030 (testability)
  • Workshop outputs: docs/workshops/content-gap-analysis_v0_1/SUMMARY.md

Notes

Content loader Phase 2 (#408):

Content loader was stubbed in Sprint 2-3. Phase 2 extends it to load real content from YAML files populated by copy team's conversion work and the C4-C8 YAML population tickets below.

  • What exists:
    • Content directory structure: content/ with full nested hierarchy (Sprint 3, #385)
    • Schema files: content/_schema/*.schema.yaml (Sprint 3, #386)
    • Validation tooling: make validate-content (Sprint 3, #392)
    • Stub loader: likely in server/src/ (check for existing content loading code from Sprint 2-3)
  • What to deliver: Extend content loader to read and instantiate real district content, NPC profiles, dialogue pools, templates, triangles. This is the bridge from authored YAML files to runtime ECS entities.
  • Blocked by: #387-#391 (YAML population tickets — can't load content that doesn't exist) + #398 (copy team NPC conversion).
  • Integration: Feeds NPC ECS entities into simulation. Works with existing server/src/npc/ module (mod.rs, relationships.rs, routine.rs). Likely creates or extends server/src/simulation/content_loader.rs.
  • Note: This is NOT an authoring ticket. You're implementing the loader that reads files other people write. The copy team authors content; you make the server consume it.

YAML population tickets (#387-#391):

Five parallel tasks that populate content/global/ and content/campaigns/.../transit/ directories with v0.1 data. These are mechanical data-entry tickets implementing schemas from Sprint 3 and taxonomy from D-035.

All five use existing schema files from content/_schema/ and validate via make validate-content.

#387 (Enums):

  • File: content/global/enums/situations.yaml, topics.yaml, moods.yaml, triggers.yaml, access-tiers.yaml, activities.yaml
  • Content: 13 situations, 9 topics, 8 moods, 9 triggers, 5 access tiers, activities list (from Gestalt routine format + Miri cultural patterns)
  • Source: D-035 appendices, workshop Gap Analysis outputs
  • Purpose: These are the canonical enum values referenced by all dialogue and monologue tags

#388 (Entity attributes):

  • File: content/global/knowledge/entity-attributes.yaml
  • Content: 16 canonical entity attribute keys (14 original from D-024, 4 new, 2 renamed per workshop Appendix A7)
  • Format: Machine-readable attribute definitions. All observer→target.
  • Purpose: Knowledge graph attribute vocabulary

#389 (Pools):

  • File: content/global/pools.yaml or content/campaigns/main/systems/van-maanens-star/stations/sova/pools.yaml (decide per workshop design doc #384)
  • Content: v0.1 single-candidate pools: friend_smuggler (kael-davan), friend_detective (sera-venn), bar_regulars, compromised_inspector, primary_contraband
  • Purpose: Seed-time selection system. Architecture supports N candidates; v0.1 has 1 each for deterministic testing. v0.2 expands to real pools.

#390 (Templates):

  • Files: content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/templates/logistics-hub.yaml, bar.yaml, smuggling-ring.yaml
  • Content: 3 social site templates. Each declares named role slots with count ranges, required flags, pool references, triangle constraints.
  • Purpose: Template instantiation system (D-025 social sites). NPCs fill roles.

#391 (Triangles):

  • Files: content/campaigns/main/systems/van-maanens-star/stations/sova/districts/transit/triangles/hub-power.yaml, worried-knowledge.yaml, bar-tensions.yaml, worried-partner.yaml, informant-question.yaml
  • Content: 5 v0.1 triangles per workshop synthesis. T1 (hub-power, active fork), T2 (worried-knowledge, active fork), T3 (bar-tensions, passive), T4 (worried-partner, active fork), T5 (informant-question, passive).
  • Purpose: Atomic units of social intrigue (D-024). Self-contained fork points for storyteller activation.

Seed configuration schema (#394):

Design document (not implementation) for the seed configuration schema. Defines what the randomizer produces at game-start: FRIEND selections, social site population, compromised NPC, contraband type, entanglement overrides.

  • Deliverable: docs/architecture/seed-configuration-schema.md design document
  • Scope: v0.1 has single-candidate pools but architecture must support N-candidate randomization for v0.2 replayability
  • Purpose: This is the handoff contract between "what content authors define" (pools, templates, triangles) and "what the game instantiates" (specific NPCs, specific relationships, specific activated triangles)
  • Note: Design doc only. Implementation comes in Sprint 5+.

YAML → RON converter (#403):

Build-time converter tool: reads content YAML, emits RON. Lives in tooling/content-converter/ (create new crate). Runs as make content-ron.

  • What exists: tooling/ directory at repo root
  • What to deliver: Rust binary crate that parses YAML content files and serializes to RON. v0.1 scope: proof-of-concept for one content type (e.g., NPC profiles or dialogue pools).
  • Integration: NOT on critical path — engine consumes YAML in v0.1. RON is future-proofing for runtime performance (RON deserialization is faster than YAML). Build system integration via Makefile target.
  • Note: This is infrastructure tooling, not game logic. Parallel work, low priority.

Line previewer CLI (#407):

CLI tool to preview monologue/dialogue line selection for a given game state. Lives in tooling/line-previewer/ (create new crate).

  • What exists: tooling/ directory
  • What to deliver: Rust CLI that simulates line selection. Input: YAML content files + synthetic game state (character, location, knowledge state, mood, active NPCs). Output: which lines would be selected and why (shows tag matching, prerequisite evaluation, weighted selection).
  • Purpose: Authoring tool for copy team. Lets Mellanie/Paula test "does this line trigger when I expect it to?" without running the full game.
  • Integration: Reads same YAML schema as content loader. Uses same selection logic (can share code with dialogue/monologue systems or reimplement simplified version). Not part of game runtime — pure tooling.
  • Blocked by: #386 (content schema, done) and #392 (validation CLI, done) — needs to parse same YAML format.

Dependency Chain

#387 (enums) → #408 (content loader Phase 2)
#388 (entity attributes) → #408
#389 (pools) → #408
#390 (templates) → #408
#391 (triangles) → #408
#398 (copy: Wiki→YAML NPCs) → #408

#408 (content loader) → real content in-game

#394 (seed schema design doc) → standalone (design only)
#403 (YAML→RON converter) → standalone (future-proofing)
#407 (line previewer CLI) → standalone (authoring tool)

Critical path: #387-#391 + #398 (copy team) all feed into #408. Until #408 lands, the server can't load v0.1 content.

Parallel work: All five YAML population tickets (#387-#391) are independent and can proceed in parallel. #403 and #407 are standalone tooling — not blocking anything.

PR Workflow

When ready to submit, create a PR with tea CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):

tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): description" --description "body" --base main --head server