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

title, description, type, status, sprint, team
title description type status sprint team
Sprint 13 — Joint Briefing Full audio architecture wiring, zone crossfades, dip profiles, v0.1 content completion sprint archived 13 joint

Sprint 13: Sound — Joint / Integration Notes

Goal: Wire the full audio architecture end-to-end — AudioManager, zone crossfades, dip profiles, recognition chime, and conversation murmur — and complete v0.1 content authoring so opening hooks, tutorial monologue, and all content packs are done.

Sprint 13 ID: 13 Status: planning (activate with db/connectors/sprint start)


Pre-Sprint Decisions

The following decisions are implemented this sprint and must be cross-referenced:

Decision Domain Implementing ticket(s)
D-067 (recognition chime at cognitive delay onset) perception #531 (client)
D-068 (5-bus audio architecture) architecture #528 (client)
D-069 (audio dip profiles) perception #530 (client)
D-070 (confrontation as cognitive vulnerability) perception #530 (client — no UI indicator)
D-071 (ListeningFocus boost for eavesdropping) perception #530 (client — 30-tick gate)
D-072 (universal NPC conversation murmur) perception #532 (audio), #533 (client)
D-073 (zone crossfade — hard boundary, soft transition) architecture #529 (client)
D-074 (audio aesthetic — insert-tech vs organic) content #532 (audio — aesthetic guide)
OQ-09 (zone temperature memory — server or client) perception #523 (server — resolve + implement)

Cross-Team Dependencies

Dependency From To Risk
#532 (murmur asset committed to audio branch) audio client #533 Medium — client can stub; wire when asset arrives
#523 (OQ-09 resolution — zone_id in snapshot?) server client #529 Low — zone crossfade uses zone_id; if not yet in snapshot, server adds it
#315 (monologue display spec) visual future client monologue UI (Sprint 14) Low — #315 output is a spec doc, does not block Sprint 13 client tickets

Coordination protocol:

  • Audio team (#532): Signal to client team when sfx_npc_murmur.ogg (or equivalent) is committed to the audio branch so #533 can be unblocked.
  • Server team (#523): If OQ-09 resolution requires adding zone_id to ObserverSnapshot tile data, coordinate with client team on the field name before implementing — client's zone crossfade (#529) reads this field.
  • Client team (#528 first): All other client tickets depend on AudioManager being complete. Start #528 immediately and signal when done so #529, #530, #531 can proceed in parallel.

Sprint Completion Proof

When Sprint 13 is done, the following is concretely observable:

  1. AudioManager production-ready: Launch the client. Open Project > Audio in Godot — five buses are present: Music, Ambient, WorldSFX, PlayerActions, UISounds. Navigate to settings — five volume sliders appear, one per bus. Adjust a slider — the in-game volume changes in real time and the setting persists across restart.

  2. Zone crossfades: In the live game, walk from the hub/workplace area into the bar. Within 1.5-2s of crossing the boundary tile, the ambient audio smoothly transitions from hub ambient to bar ambient. Walk back — it reverses. No audio pops. No crossfade artifacts when crossing rapidly.

  3. Audio dip profiles: Start a conversation with an NPC. Within 300ms, ambient volume drops 6-8dB (relative to slider setting). End the conversation — ambient restores over 500ms. Initiate a confrontation — ambient drops further with a low-pass filter sweep (muffled feel, D-070). Stand still for 30+ seconds (30+ ticks at 10tps) without conversing — world SFX subtly boosts (eavesdrop bonus, D-071). No UI indicator for any of these states.

  4. Recognition chime: Move near an entity that is in fog but detectable (heard/sensed). The chime plays at the moment of detection (onset of cognitive delay) — before monologue text appears, before the fog blob resolves to a silhouette. Chime is on UISounds bus. Duration is 300-400ms. Monologue text appears during the delay while the chime is still fading.

  5. NPC murmur: When two NPCs are in conversation range, a soft murmur sound plays on the WorldSFX bus. In the bar, the murmur blends into ambient and is nearly inaudible. In a corridor, the murmur is clearly audible and draws attention. Single asset — same sound in both zones.

  6. Gauntlet rooms: Running make test-server (or cargo test in server/) executes sound_lab_*, decay_observatory_*, and shift_change_* tests without failure. Tests are deterministic across runs.

  7. OQ-09 resolved: decisions/ contains a new or amended decision recording the zone temperature memory approach. If server-tracked: ObserverSnapshot tile data includes a zone_id field. If client-only: fog shader applies temperature tint from local visited-zone memory. Either way, deep fog in the bar shows a warm dark tint, hub shows cool dark, corridors neutral dark.

  8. Monologue display spec: docs/design/monologue-display-spec.md exists with all required sections: typography, positioning, stacking rules, priority system, fade animation, character color differentiation (with hex values), and 80-character line length constraint.


Test Plan Alignment (D-030)

Sprint 13 is in the integration phase. Test focus:

  • Client: AudioManager unit tests — registry scan with mock assets, bus setup, dip apply/clear/interrupt, zone crossfade tween timing. Recognition chime test — verify CHIME_RECOGNITION plays at snapshot onset, not at recognition completion. All tests via Hoshe's client QA harness.
  • Server: Sound Lab, Decay Observatory, Shift Change gauntlet rooms execute correctly. decay_observatory_* tests verify BTreeMap-deterministic confidence degradation. shift_change_* tests advance the game clock through a phase boundary and verify NPC routine transition.
  • CI: make ci must pass across all branches before PR. make pre-pr runs content cross-reference validation and fixture staleness check. No new HashMap usage in simulation crate (clippy ban still active per #343).

Decision Coverage Gaps (remaining after Sprint 13)

The following confirmed decisions still have no implementing tickets after Sprint 13 closes. Flag to Team Leader if any block upcoming work:

  • D-031 (time system / game clock) — server/src/simulation/time.rs exists; gauntlet shift change room (#505) exercises it. No standalone ticket. Monitor.
  • D-032 (separate monologue pools per character) — no ticket yet; relevant to monologue system (future sprint).
  • D-033 (entity color = relationship to player) — covered by visual grammar (#303, done) and monologue display spec (#315 this sprint).
  • D-036 (Sova Transit District setting) — no implementation ticket; world map authoring is future.
  • D-038 (audio assets — 8 files) — assets produced (Sprint 10, #327). Integration via #528 and murmur via #532.
  • D-040 (wiki taxonomy) — no ticket; wiki structure is documentation, not code.

Notes for Sprint Start

To activate the sprint once planning is approved:

db/connectors/sprint start

This sets Sprint 13 to active. Teams then run db/connectors/sprint start-work --team <team> for their full context dump.