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>
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 theaudiobranch so #533 can be unblocked. - Server team (#523): If OQ-09 resolution requires adding
zone_idtoObserverSnapshottile 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:
-
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.
-
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.
-
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.
-
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.
-
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.
-
Gauntlet rooms: Running
make test-server(orcargo testinserver/) executessound_lab_*,decay_observatory_*, andshift_change_*tests without failure. Tests are deterministic across runs. -
OQ-09 resolved:
decisions/contains a new or amended decision recording the zone temperature memory approach. If server-tracked:ObserverSnapshottile data includes azone_idfield. 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. -
Monologue display spec:
docs/design/monologue-display-spec.mdexists 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_RECOGNITIONplays 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 cimust pass across all branches before PR.make pre-prruns 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.rsexists; 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.