Files
settled-reach/docs/sprints/sprint-23/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

5.9 KiB
Raw Blame History

title, description, type, status, sprint, team
title description type status sprint team
Sprint 23 — Joint Briefing Tile format coordination, debug command wire format, protocol version bump sprint archived 23 joint

Sprint 23: Terrain — Joint / Integration

Goal: Build the walkable Sova world under the authored content, complete the storyteller engagement layer, and add the debug console — clearing the path to v0.1 integration in Sprint 24.

Agents: All implementation agents (Dudley, Tyre, Hoshe, Stig, Araminta)


Pre-Sprint Actions

These must happen at sprint start, before implementation tickets begin:

Action Owner Blocks
Confirm tile format (character codes, row encoding, multi-z approach) Dudley + Araminta sync (day 12) #582, #583 — Araminta cannot start until format is published in types.rs
Confirm DebugCommandKind wire format (exact JSON/msgpack structure) Dudley + Stig sync (day 12) #581 — client dispatch serialization depends on this
Confirm PROTOCOL_VERSION bump: 17 → 18 Dudley + Stig #580 server + #581 client must land together

Cross-Team Dependencies

Dependency Direction Notes
Tile format spec Server (#577) → Visual (#582, #583) Dudley publishes format in types.rs; Araminta starts authoring same day
DebugCommandKind wire format Server (#580) → Client (#581) Stig cannot finalize protocol.gd encoding until Dudley publishes the enum
PROTOCOL_VERSION 17→18 Server (#580) ↔ Client (#581) Both must land in the same merge window; version mismatch crashes the connection
LOS wall margin Server (#584) → Client (#585) Client rendering change depends on server sending boundary tiles

Housekeeping Done This Sprint

The following stale tickets were closed during sprint planning:

# Reason
#184 Logistics hub template YAML was already complete in templates/logistics-hub.yaml
#339 Protocol version handshake already implemented in Sprint 19 via #555/#556
#143 Superseded by richer #576 (tile-type layer with full spec)
#144 Superseded by #577 (location loader is the v0.1 equivalent)
#145 Superseded by richer #578 (chunk streaming with v0.1 full-preload mode)
#154 Functional cluster spatial specs live in D-025 and D-093 — already done
#155 Hand-crafted authoring is now #582/#583 with correct format and blocker
#157 Gate corridor is covered by #583 (Last Shift + maintenance + gate)

Sprint Completion Proof

The sprint is done when all of the following are observable:

  1. Walkable world boots. Start the server in production mode (no gauntlet feature). It loads tile data from all four Sova locations (The Terminal, The Last Shift, maintenance corridors, gate corridor). No panic. WalkabilityMap populated from YAML — walls block movement, floors allow it.

  2. Storyteller activates from player behavior. Run a test: spawn at The Terminal, observe Kael for 3000 ticks. EngagementRecord increments. After CONTAMINATION_DELAY_TICKS, activation_pass() fires and emits TriangleActivated for the hub-power or worried-partner triangle.

  3. Debug console works end-to-end. Boot production game. Tilde key opens console. Type status — returns contamination state and current tick. Type contaminate — skips to contamination. Type triangles — lists all TriangleState entities with their IDs and classifications.

  4. Debug console in settings. Open Settings menu. Debug Console toggle is visible. Disable it. Tilde key no longer opens console.

  5. Speaker colors are identity-bound. Open a conversation with Kael, then end it. Open another conversation with Voss. Kael's color is consistent; Voss has a different color; neither color is position-based.

  6. LOS boundary walls render. Walk up to a wall at the edge of vision. The wall tile is visible and distinct from fog rather than bleeding into the fog overlay.

  7. CI green. make ci passes on all branches. No regressions.


Test Plan Alignment (D-030)

Sprint 23 is Phase 2 integration territory (D-030 Phase 2: integration tests + information boundary tests):

  • #576: Unit tests — TileKind round-trip in WalkabilityMap. Phase 1 (data structure).
  • #577: Integration test — production boot loads tile data, WalkabilityMap is populated correctly. Phase 2.
  • #578: Unit test — chunk load/unload at player boundary. Phase 1.
  • #570#572#579: Integration test — 3000-tick simulation asserts EngagementRecord increments + TriangleActivated fires. Phase 2.
  • #580/#581: Manual acceptance — debug console smoke test (status, contaminate, triangles). Phase 2.
  • #584/#585: Visual regression test — add golden test for LOS boundary wall rendering. Phase 2.

Open Questions

ID Question Blocks Action
Q-052 Storyteller hint delivery channels #579 downstream consumers Read for context but does not block Sprint 23. #579 emits TriangleActivated; consumers wired in Sprint 24.

PR Merge Order

To avoid conflicts on shared files (bridge/types.rs, protocol.gd, PROTOCOL_VERSION):

  1. Server PRs (#576, #570, #571, #572) — no client/visual dependencies; merge first.
  2. Server PR (#577 tile format) — merge and notify Araminta immediately so visual authoring starts.
  3. Server PRs (#578, #579, #584) — merge in any order after their respective blockers.
  4. Server PR #580 (debug server) + Client PR #581 (debug client) — must land together. Coordinate merge timing. Both bump PROTOCOL_VERSION to 18.
  5. Visual PRs (#582, #583) — merge after server #577 is in main.
  6. Client PRs (#573, #574) — no dependencies; merge anytime.
  7. Client PR #585 (LOS wall margin) — merge after server #584 is in main.

Critical: #580 and #581 share the PROTOCOL_VERSION bump. Do not merge one without the other.