--- title: "Sprint 13 — Joint Briefing" description: "Full audio architecture wiring, zone crossfades, dip profiles, v0.1 content completion" type: sprint status: archived sprint: 13 team: "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: ```bash db/connectors/sprint start ``` This sets Sprint 13 to `active`. Teams then run `db/connectors/sprint start-work --team ` for their full context dump.