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

177 lines
7.5 KiB
Markdown

---
title: "Sprint 10 — Joint Briefing"
description: "Gauntlet expansion, audio architecture wiring, client UX polish carry-overs"
type: sprint
status: archived
sprint: 10
team: "joint"
---
# 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 <file.jsonl>` 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 <team>
# Standard PR (all flags required — see CLAUDE.md)
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
--title "feat(<scope>): sprint 10 prove — <team summary>" \
--description "body" --base main --head <branch>
```