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>
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-serverincludes 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
CarriedBysurvives transition; item absent from tile queries in new room; present in player inventory in snapshot
Content scaling (server #513)
make test-serverincludes 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.jsonat tick 100
Contraband detection (server #425)
- NPC with
ScanAuthoritywithin interaction range of player carrying aContraband-flagged item → NPC KG updated withHasContrabandfact atKnowsDetailsconfidence - 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-serverstill 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.jsonlagainst 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.gdenforces 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