Files
settled-reach/docs/sprints/sprint-4/joint.md
T
jpmschweitzerandClaude Opus 4.6 bccdcfcdcb docs(docs): add frontmatter to all sprint briefings
Standardized YAML frontmatter on all 115 sprint briefing files across
sprints 1-26 with title, description, type, status, sprint number, and
team fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 00:15:45 +01:00

7.3 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 4 — Joint Briefing Infrastructure-to-content transition, parallel content authoring and systems implementation sprint archived 4 joint

Sprint 4: Feel — Joint Tasks

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

Agents: Cross-team coordination (SI, Team Leader)

Sprint Overview

Sprint 4 is the transition from infrastructure to content. Sprint 1-3 built the engine, the bridge, the rendering pipeline, the content directory structure, and the schema validation. Sprint 4 populates the content directory with real authored material and builds the server-side loader that brings that content into the game.

This is the first sprint where content authoring and systems implementation happen in parallel. The copy team writes YAML files. The server team makes the game consume them. The client team finishes the last infrastructure piece (interaction prompts). The CI team adds authoring quality-of-life tooling.

Team Breakdown

Team Ticket Count Focus
copy 6 FactId dual-lens text, PC-as-NPC briefs, Wiki→YAML NPC conversion, monologue pool (~200 lines), environmental examples, news ticker
server 9 Content loader Phase 2, YAML population (enums/attributes/pools/templates/triangles), seed schema design, tooling (RON converter, line previewer)
client 1 Interaction prompt carry-over from Sprint 3
ci 1 Pre-commit FactId typo check

Critical Path

The critical path runs through content population → content loading:

Copy team #398 (Wiki→YAML NPCs) ─┐
Server team #387 (enums)         ├─→ Server team #408 (content loader Phase 2) → content in-game
Server team #388 (entity attrs)  │
Server team #389 (pools)         │
Server team #390 (templates)     │
Server team #391 (triangles)     ┘

#408 is the integration point. It is blocked by 6 tickets (5 server YAML population + 1 copy NPC conversion). Once #408 lands, the game can load v0.1 content.

All other tickets (copy #373/#383/#399/#395, server #394/#403/#407, client #405, ci #393) are parallel work that improves authoring, adds content variety, or cleans up carry-overs.

Sprint Completion Proof

Sprint 4 is done when:

  1. Content files exist and validate: make validate-content passes with real v0.1 content (not stubs)
  2. Server loads content: cargo run (server binary) successfully loads NPCs, templates, triangles, dialogue pools from YAML without errors
  3. Monologue pool is playable: Launch game, move detective or smuggler to a location, observe location-triggered monologue from the ~200-line pool
  4. Interaction prompt works: Walk detective near Sera Venn (or smuggler near Kael Davan), see "E: Talk" prompt, press E to trigger interaction (dialogue rendering not required — server receives interaction event is sufficient proof)
  5. FactId typo check protects authors: Attempt to commit a YAML file with invalid FactId → pre-commit hook rejects it with clear error message

Observable criteria: You can walk the detective through Sova Transit District, see authored monologue text in the HUD, approach an NPC and see the interaction prompt. The content exists in YAML, the server loaded it, the client rendered it.

Integration Risks

Copy ↔ Server handoff (#398 → #408):

The copy team writes NPC YAML files. The server team implements the loader. Risk: schema mismatch or missing fields discovered late.

Mitigation: Server team implements #387-#391 (YAML population) first. This tests the full schema → loader pipeline with known-good data before copy team's #398 (NPC conversion) lands. If the loader works with templates/triangles/enums, it will work with NPCs.

Timeline dependency:

#408 (content loader Phase 2) is blocked by 6 tickets. If any of #387-#391 or #398 slip, #408 cannot start.

Mitigation: Server team can implement #408 skeleton against partial data (load just enums, or just templates). Copy team's #398 can land incrementally (convert 5 NPCs, then 10, then all 17). Incremental integration reduces end-of-sprint risk.

Client carry-over (#405):

Stig has #405 in progress from Sprint 3. This ticket is not blocking anything in Sprint 4, but it is blocking Sprint 5 dialogue rendering.

Mitigation: If #405 carries over again, dialogue rendering in Sprint 5 slips. Flag this as a risk to Team Leader if progress stalls.

Test Alignment (D-030)

Sprint 4 is in Phase 2 of the testability roadmap (sprint 3-4: integration tests).

Key test requirements for this sprint:

  • Content validation: make validate-content is the gate. No YAML file merges without passing validation.
  • Content loader integration test: Server team (#408) must include integration test: load a minimal YAML content set, instantiate NPCs in ECS World, verify entity creation.
  • Monologue pipeline integration test: Trigger location-entry event → verify monologue line selection from pool → verify correct line based on tags (character, location, trigger type).
  • IPC stability: Client #405 (interaction prompt) must not break existing bridge protocol tests from Sprint 1-3.

Hoshe's involvement: QA review on #408 (content loader — this is a critical integration point) and #392 validation (ensure make validate-content catches schema violations).

Open Questions

None. All Sprint 4 blockers were resolved in Sprint 3:

  • #261 (Dual Lens Authoring Guide) → done
  • #381 (PC-as-NPC spec) → done
  • #382 (Smuggler voice card) → done
  • #384 (Content directory design doc) → done
  • #385 (Content directory skeleton) → done
  • #386 (Content schema definitions) → done
  • #392 (Validation CLI) → done

One potential blocker flagged: copy team #378 (environmental text examples) is blocked by #319 (wiki authoring guide structure, backlog). Team Leader should decide: defer #378 to Sprint 5, or promote #319 into Sprint 4.

PR Workflow

All teams use tea CLI for PR creation. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):

# Copy team
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(content): description" --description "body" --base main --head copy

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

# Client team
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(client): description" --description "body" --base main --head client

# CI team
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(ci): description" --description "body" --base main --head ci

Sprint Retrospective Prep

Questions for end-of-sprint review:

  1. Did the content → loader handoff work smoothly? Any schema mismatches discovered late?
  2. How much of the monologue pool was authored? Does ~200 lines feel like enough variety for v0.1?
  3. Did incremental integration (partial NPCs, partial loader) reduce risk or add coordination overhead?
  4. Is the line previewer CLI (#407) actually useful for content authors, or is it over-engineering?
  5. Did #405 (interaction prompt) carry over again? If yes, why?

These questions feed into Sprint 5 planning.