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

62 lines
4.8 KiB
Markdown

---
title: "Sprint 13 — Server Briefing"
description: "Gauntlet rooms (Sound Lab, Decay Observatory, Shift Change), OQ-09 zone temperature"
type: sprint
status: archived
sprint: 13
team: "server"
---
# Sprint 13: Sound — Server Tasks
**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.
**Branch:** `server`
**Agents:** Dudley (simulation dev), Tyre (architect), Hoshe (QA)
## Carry-over from Sprint 12
None. All Sprint 12 server tickets done.
## New Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #505 | Gauntlet rooms: Sound Lab, Decay Observatory, Shift Change | — |
| #523 | Resolve OQ-09: zone temperature memory — server-tracked or client-only | — |
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/architecture.md` — D-020 (IPC bridge, ObserverSnapshot), D-041 (knowledge graph — decay system), D-068 (5-bus audio architecture — zone_id in snapshot)
- `decisions/perception.md` — D-018 (three-range sound model), D-059 (fog shader — zone temperature tint for OQ-09), D-060 (cognitive delay for fog recognition)
- `decisions/scope.md` — D-030 (test priority phases — integration phase)
## Notes
- **#505 — Gauntlet rooms: Sound Lab, Decay Observatory, Shift Change:** Three new rooms added to `server/src/test_world/rooms/`. Existing rooms for reference: `server/src/test_world/rooms/` contains `hub.rs`, `inventory_warehouse.rs`, `occlusion_corridor.rs`, `pause_chamber.rs`, `interaction_gallery.rs`, `fog_theater.rs`, `crowd_plaza.rs`, `dialogue_room.rs`, `eavesdrop_alcove.rs`, `sprint_gauntlet.rs`, `confrontation_stage.rs`. Follow the existing room module pattern — each room exports a `build()` function that populates a `World` with ECS components. Add entries to `server/src/test_world/rooms/mod.rs`. The three rooms:
- **Sound Lab:** Tests the three-range sound model (D-018). Place sound-emitting entities at calibrated distances. Verify `RangeCategory::Close` events hit the snapshot at <3m, `Medium` at 3-15m, `Long` at 15-40m. Tests: `sound_lab_close_range_in_snapshot`, `sound_lab_medium_range_indicator_present`, `sound_lab_long_range_insert_only`.
- **Decay Observatory:** Tests knowledge graph decay (D-041 — decay runs every 10 ticks per D-031). Place entities in LOS, then move player out of LOS. Advance ticks and observe confidence degradation: `Direct``KnowsDetails``KnowsOf``Suspects`. Tests: `decay_observatory_confidence_degrades_after_los_loss`, `decay_observatory_stale_after_threshold`.
- **Shift Change:** Tests NPC routine transitions at day phase boundaries (D-031 — Morning/Afternoon/Evening/Night phases). Advance game clock to a phase boundary and verify NPCs transition routine. Tests: `shift_change_npc_transitions_routine_at_phase_boundary`.
- Effort estimate: 3d. Sound Lab is the most complex (requires sound event fixture verification).
- **#523 — Resolve OQ-09: zone temperature memory:** This is an architectural decision. D-059 specifies deep fog (previously explored tiles) carries a ~10% zone temperature tint (bar=warm dark, hub=cool dark, corridor=neutral dark). The question: server-tracked or client-only? Arguments: server-tracked = diegetically accurate (server knows which zone each tile belongs to, sends `zone_id` or `zone_temperature` per tile in `ObserverSnapshot`); client-only = simpler (client remembers last-visited zone per tile and applies tint from local memory). The server already sends `zone_id` per tile if D-073 zone crossfade is implemented (client needs zone info for crossfades). If `zone_id` is already in the snapshot for D-073, zone temperature memory is essentially free — client maps `zone_id` → temperature tint from a local lookup table, using the snapshot's `zone_id` per tile. Recommended resolution: server-tracked via `zone_id` (already needed for D-073), client applies temperature tint from local `zone_id → tint` mapping. Write the decision, update `decisions/perception.md` or create a new D-NNN entry, and implement whichever approach is decided. If `zone_id` is not yet in the tile data of `ObserverSnapshot`, add it.
## Dependency Chain
```
#505 (Sound Lab, Decay Observatory, Shift Change) — standalone, parallel
#523 (OQ-09 resolution) — standalone, parallel
```
Both tickets are independent of each other and can proceed in parallel.
## PR Workflow
When ready to submit, create a PR with `tea` CLI. All flags are required to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
```bash
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): description" --description "body" --base main --head server
```