# Sprint 10: Prove — Joint / Integration **Goal:** Expand the Gauntlet test suite with new rooms and cross-room scenarios, wire the audio architecture end-to-end, and complete client UX polish from Sprint 9 carry-overs — proving the full system holds together. **Agents:** All implementation agents (Dudley, Stig, Hoshe, Tyre, Justine, Inigo) --- ## Pre-Sprint Decisions No new decisions are required before Sprint 10 begins. All sprint tickets operate within confirmed decisions. Items to monitor: | Item | Status | Needed by | |------|--------|-----------| | Relationship state in ObserverSnapshot | Confirm with server team that relationship state is carried per entity in the snapshot (Q-019 partial resolution) | #521 (D-033 color shift, client) | | CI pipeline greenlight | Team Leader must confirm before #510 starts | #510 (Gitea Actions YAML, CI) | | Server #491 merge timing | Client #501 is blocked on it — server should prioritize #491 in the first half of sprint | #501 (hub teleport UX, client) | | Server #520 merge timing | Client #521 is blocked on it — server should ship #520 before sprint midpoint | #521 (confrontation color shift, client) | --- ## Cross-Team Dependencies ``` Server #491 (hub teleport action) → Client #501 (hub teleport UX — Home key + fade) Server #520 (confrontation world response) → Client #521 (D-033 color shift on confrontation) Server #500 (content scaling test) → CI #499 (perf baseline — benefits from #500 data) Server #498 (Gauntlet rooms 4-7) → #506 (cross-room transitions, deferred to Sprint 11) Server #483 (replay loading) → Scripted Gauntlet testing (unblocks Sprint 11 automation) Audio #327 (8 ambient + SFX assets) → Client AudioManager (automatic registration via directory scan — no client code change) → D-073 zone crossfade stub can be tested with real assets for the first time ``` **Critical path:** `Server #491 → Client #501` and `Server #520 → Client #521`. Both server tickets need to merge before sprint midpoint to give client time to complete their dependent work. --- ## Sprint Completion Proof Sprint 10 is complete when all of the following are observable: **Hub teleport** - Pressing Home key in Gauntlet mode sends `TeleportToHub`, player entity moves to hub spawn tile - 0.3s fade-to-black-and-back plays on teleport - Dialogue/monologue/interaction buffer is cleared on teleport - Non-Gauntlet maps: action is rejected server-side with log warning; client shows no effect **Room reset UX** - `reset_plate` tile type renders with amber color - 'Reset Room' verb appears in interaction menu when player faces reset plate - On reset: 0.15s amber flash + "Systems recalibrated." monologue line plays **Auto-checklist tracking** - In test-client mode: checklist YAML loads, client evaluates ObserverSnapshot against conditions, verified items tick off automatically in HUD overlay - Checklist HUD is absent in non-test-client Godot mode **Gauntlet expansion** - Server boots with Gauntlet content and all 7 rooms (existing 3 + new 4) load without panic - Room constants for all 4 new rooms in `server/src/test_world/constants.rs` - Room reset works correctly in new rooms (entity positions and fog reset to tick-0 state) **Content scaling** - `make test-server` includes the content scaling test: baseline run passes, extra-NPC comparative run stays within D-026 tick budget **Performance baseline** - `make perf-baseline` runs without error and produces `tests/perf/baseline.json` (or equivalent) - Baseline file committed to repo **Replay loading** - `tooling/test-client --replay ` loads the file and sends PlayerInput at correct tick timing against a live server **Client UX polish** - Michroma font renders in all Labels/RichTextLabels in HUD and dialogue box - WASD movement is mouse-relative (forward = toward cursor direction) - Insert open sends `PauseSimulation`, insert close sends `ResumeSimulation` **Confrontation system** - Confrontation delivery: target NPC shifts to Tier 2 animation, relationship state decrements, monologue spike fires (server) - Client: entity D-033 tint fades to new relationship color over 0.5-1s on confrontation delivery **Audio** - 8 OGG files present in `audio` branch under `client/audio/` - `AudioManager` registers all 8 at startup (log output confirms count) - Ambient loops play without audible seam - Monologue chimes have no reverb (insert-tech aesthetic per D-074) **CI (if greenlit)** - Gitea Actions YAML committed to `.gitea/workflows/` - Commit tier runs in <2min on push - PR merge gate wraps `make pre-pr` in <15min --- ## Test Plan Alignment (D-030) | D-030 Phase | Coverage | Sprint 10 Status | |-------------|----------|-----------------| | Phase 1 (infra) | Done Sprints 1-2 | — | | Phase 2 (integration) | Done Sprints 3-5 | — | | Phase 3 (CauseChain, divergent snapshots) | Gauntlet golden suite (#485, Sprint 9) | Expanding with rooms 4-7 | | Replay / scripted testing | #483 (test client replay loading) | In scope | | Performance regression baseline | #499 (make perf-baseline) | In scope | | Content scaling | #500 (baseline + NPC pack comparative) | In scope | | Pre-PR gate | `make pre-pr` (Sprint 9, done) | Stable | --- ## Open Questions to Resolve Early - **Q-019 (partial): Client-side entity StableId / relationship state in snapshot** — Client #521 needs relationship state per entity in ObserverSnapshot. Server team should confirm scope before #521 starts. No formal Q-NNN resolution required — just a server team confirmation. - **CI pipeline greenlight (no Q-NNN)** — #510 has an explicit "deferred until lead greenlights" note. Team Leader to confirm before CI team starts that ticket. --- ## Sequence Recommendation **Days 1-3 (all teams in parallel):** - Server: start #491 immediately (no blockers). Priority — unblocks client #501. - Server: start #483 (no blockers). `replay.rs` stub exists in `tooling/test-client/src/`. - Server: start #498 (no blockers). 4 new Gauntlet rooms; follow existing room pattern. - Server: start #514 (small, standalone). - Server: start #519 (standalone, #427 done). - Client: start #502 (no blockers, #490 done). - Client: start #503 (no blockers, #497 done). - Client: start #517 (standalone). - Client: start #526 (standalone). - Client: start #518 (standalone). - CI: start #499 (no blockers, #487 done). - CI: start #515 (standalone, #464 done). - Audio: start #327. **Days 4-6:** - Server: start #520 (no blockers). Priority — unblocks client #521. - Server: start #500 (no blockers, #489 done). - Client: #501 unblocks once server #491 merges. **Days 7-10:** - Client: #521 unblocks once server #520 merges. - CI: #510 starts only after lead greenlight (may be later in sprint or deferred). - All teams: verification 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 — all tickets are single-team. The `joint.md` tracks integration readiness but does not produce a separate branch. ```bash # Verify sprint assignment before PR db/connectors/sprint status --team # Standard PR (all flags required — see CLAUDE.md) tea pr create --repo jpmschweitzer/settled-reach --login schweitz \ --title "feat(): sprint 10 prove — " \ --description "body" --base main --head ```