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

7.5 KiB

title, description, type, status, sprint, team
title description type status sprint team
Sprint 10 — Joint Briefing Gauntlet expansion, audio architecture wiring, client UX polish carry-overs sprint archived 10 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.

# 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>