Files
settled-reach/docs/sprints/sprint-11/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.4 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 11 — Joint Briefing Gauntlet test matrix completion, WRONG-button bug capture, OQ-07/OQ-18 resolution sprint archived 11 joint

Sprint 11: Combine — Joint / Integration

Goal: Complete the Gauntlet test matrix with final interaction-combination rooms and cross-room scenarios, deliver the WRONG-button bug-capture system, resolve open implementation questions OQ-07 and OQ-18, and add contraband detection — hardening the system as a fully covered, testable unit.

Agents: Dudley, Tyre, Hoshe (server); Stig, Tyre, Hoshe (client)


Pre-Sprint Decisions

Item Status Needed by
OQ-18 resolution (#524) Resolve day 1-2. Output: new D-NNN decision in decisions/. May require update to dialogue filter in #305. Downstream content work (unblocked immediately on resolution)
OQ-07 resolution (#522) Resolve day 1-2. Output: D-056 or D-057 amendment. #507 (WRONG button — cursor state data in captures)
RNG seed in ObserverSnapshot Client team must confirm whether seed is already present in the snapshot wire format. If not, server team must add it. Raise on day 1. #507 (replay seed capture)

No other decisions are required before Sprint 11 begins. All other tickets operate within confirmed decisions.


Cross-Team Dependencies

Server #504 (Sprint Gauntlet, Eavesdrop Alcove, Confrontation Stage)
    → Server #506 (cross-room transitions T1-T8)

Client #507 (WRONG button full captures)
    → potential Server protocol change (RNG seed field on ObserverSnapshot)
      raise day 1 if needed; server team to respond same day

Server #524 (OQ-18 resolution)
    → no client code change, but unblocks copy team content work

Client #522 (OQ-07 resolution)
    → cursor_renderer.gd + interaction list renderer update (client-only)

Critical path: Server #504 → Server #506. Server team should start #504 immediately. All other tickets are independent parallel tracks.

Potential protocol dependency: If #507 requires adding a seed field to ObserverSnapshot, this is a server change that the client depends on. Identify this on day 1 and route it through the server team as a minimal, additive struct field with #[serde(default)] so the client handles older snapshots gracefully during development.


Sprint Completion Proof

Sprint 11 is complete when all of the following are observable:

Gauntlet expansion (server #504)

  • Server boots with Gauntlet content and all 10 rooms load without panic (7 from Sprint 10 + 3 new: Sprint Gauntlet, Eavesdrop Alcove, Confrontation Stage)
  • Room constants for all 3 new rooms in server/src/test_world/constants.rs
  • Sprint Gauntlet: player sprints past an NPC → interaction buffer empty during sprint, anomaly monologue fires retroactively post-sprint
  • Eavesdrop Alcove: player in Careful stance at eavesdrop position → World SFX boost observable in log, conversation murmur event emitted
  • Confrontation Stage: player confronts NPC → peripheral NPC movement during confrontation does NOT trigger anomaly monologue; delayed "did I miss something?" monologue fires post-confrontation

Cross-room transitions (server #506)

  • make test-server includes 8 cross-room transition tests (T1-T8)
  • All 8 pass: knowledge state, inventory, fog carry-over, and stance all survive room transitions correctly
  • T2 (Inventory Interact): item CarriedBy survives transition; item absent from tile queries in new room; present in player inventory in snapshot

Content scaling (server #513)

  • make test-server includes the 100-tick max-NPC stress test
  • Test passes: every tick within D-026 100ms budget at maximum Active tier entity count (80 NPCs)
  • Behavioral regression check passes: baseline NPC subset matches tests/perf/baseline.json at tick 100

Contraband detection (server #425)

  • NPC with ScanAuthority within interaction range of player carrying a Contraband-flagged item → NPC KG updated with HasContraband fact at KnowsDetails confidence
  • Scan event present in ObserverSnapshot for that tick
  • No scan event emitted when player carries no contraband items
  • BTreeMap used for KG storage (D-010 determinism, D-041)

OQ-18 resolved (server #524)

  • New D-NNN decision committed to decisions/ (content.md or architecture.md as appropriate)
  • Decision states clearly whether dialogue access tiers and D-041 confidence tiers are the same system or layered
  • If #305 dialogue filter changed: make test-server still passes

WRONG button full captures (client #507)

  • F12 during Gauntlet play → bug report directory contains: inputs.jsonl (60 ticks of PlayerInput history), snapshots.jsonl (60 ticks of ObserverSnapshot history), seed.txt (server RNG seed), plus existing MVP files (text render, description)
  • tooling/test-client --replay inputs.jsonl against a fresh server with matching seed reproduces the same snapshot sequence
  • Ring buffer pre-allocated at startup — no per-tick allocation in hot path

OQ-07 resolved (client #522)

  • D-056 or D-057 amended with OQ-07 resolution note
  • client/scripts/rendering/cursor_renderer.gd enforces the chosen insert-off behavior
  • Interaction verb labels absent (or reduced per chosen option) when insert is off in Gauntlet test mode

Test Plan Alignment (D-030)

D-030 Phase Coverage Sprint 11 Status
Phase 1 (infra) Done Sprints 1-2
Phase 2 (integration) Done Sprints 3-5
Phase 3 (CauseChain, divergent snapshots) Gauntlet golden suite expanded Sprint 9-10 Expanding with 3 new rooms (#504)
Cross-room transitions T1-T8 from Gestalt (#506) In scope this sprint
Replay / scripted testing Replay loading done (#483, Sprint 10) WRONG button ring buffer feeds replay system (#507)
Performance regression Baseline committed (#499, Sprint 10) 100-tick stress test adds to baseline (#513)
Pre-PR gate make pre-pr stable Unchanged

Sequence Recommendation

Days 1-2 (all teams, parallel):

  • Server: start #504 immediately (no blockers). Sprint Gauntlet is the critical path node.
  • Server: start #524 (OQ-18 resolution) on day 1. Write decision by end of day 2.
  • Server: start #513 (stress test) in parallel — standalone, no dependency on #504.
  • Server: start #425 (contraband detection) in parallel — standalone.
  • Client: start #522 (OQ-07 resolution) on day 1. Implement and amend decision by end of day 2.
  • Client: start #507 (WRONG button) on day 1 — confirm RNG seed availability first.

Days 3-5:

  • Server: complete all 3 rooms in #504 and verify server boots without panic. Hand off to #506.
  • Server: start #506 (cross-room transitions) once #504 is merged.
  • Client: #507 ring buffer implementation complete; end-to-end replay test.

Days 6-10:

  • Server: complete #506 (T1-T8 tests pass).
  • All teams: verify against Sprint Completion Proof criteria.

PR Workflow

Each team submits their own PR from their branch. Integration is via merge to main. No joint branch.

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

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