--- title: "Sprint 10 — Server Briefing" description: "Gauntlet room expansion, hub teleport action, replay loading, content scaling test" type: sprint status: archived sprint: 10 team: "server" --- # Sprint 10: Prove — Server Tasks **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. **Branch:** `server` **Agents:** Dudley (simulation), Tyre (arch review), Hoshe (QA) --- ## Carry-over from Sprint 9 | # | Title | Status | Notes | |---|-------|--------|-------| | #491 | Hub teleport action (PlayerAction::TeleportToHub) | backlog | Targeted for Sprint 9, slipped due to #487 dependency completing late. Unblocked as of sprint close. | | #483 | Test client replay loading + tick-scheduled sending | backlog | Critical for scripted Gauntlet testing. Targeted Sprint 9, slipped. Unblocked (#480 done). | | #500 | Content scaling test (baseline + extra NPC comparative) | backlog | Targeted Sprint 9, deferred. Unblocked (#489 done). | --- ## New Tickets | # | Title | Blocked by | |---|-------|------------| | #491 | Hub teleport action (PlayerAction::TeleportToHub) | #487 (done) | | #483 | Test client replay loading + tick-scheduled sending | #480 (done) | | #498 | Gauntlet rooms 4-7 (Interaction Gallery, Fog Theater, Crowd Plaza, Dialogue Room) | #487 (done) | | #500 | Content scaling test (baseline + extra NPC comparative) | #489 (done) | | #514 | blocked_entities debug field on ObserverSnapshot | — | | #519 | Walk-away NPC reaction — server-side Phase 2 (animation shift, routine change) | #427 (done) | | #520 | Confrontation world response — server-side trigger | — | Use `db/connectors/ticket show ` for full details. --- ## Key Decisions - `decisions/architecture.md` — D-010 (deterministic simulation), D-026 (100ms tick budget), D-041 (knowledge graph data model) - `decisions/perception.md` — D-059 (fog/shader five layers), D-060 (cognitive delay), D-063 (confrontation world response), D-064 (walk-away three phases) - `decisions/scope.md` — D-038 (audio in v0.1 scope) --- ## Notes **#491 — Hub teleport action** - Existing: `server/src/test_world/rooms/hub.rs` for the hub spawn location. `PlayerAction` enum lives in `server/src/bridge/`. - Deliver: `PlayerAction::TeleportToHub` variant. On receipt: move player entity to hub spawn tile, clear dialogue/monologue/interaction buffer. Does NOT affect room state, inventory, game time, or knowledge graph. Reject the action with a log warning on non-Gauntlet maps. - Integration: Client #501 depends on this — ship it first half of sprint. **#483 — Test client replay loading** - Existing: `tooling/test-client/src/` has `main.rs`, `golden.rs`, `replay.rs` (stub). The `replay.rs` module exists but the loading logic was deferred. - Deliver: Load a JSONL replay file (one JSON array per tick), send `PlayerInput` at correct tick timing. Target: `tooling/test-client/src/replay.rs`. - Integration: Enables scripted Gauntlet testing end-to-end — unblocks the cross-room test scenarios in later sprints. **#498 — Gauntlet rooms 4-7** - Existing: `server/src/test_world/rooms/` has `hub.rs`, `inventory_warehouse.rs`, `occlusion_corridor.rs`, `pause_chamber.rs`. The `mod.rs` wires them together. - Deliver: Four new rooms — Interaction Gallery (24x20, 5 entities, D-057), Fog Theater (44x32, 4 entities, D-059), Crowd Plaza (32x32, 15 entities), Dialogue Room (28x20, 4 entities, D-041). Follow the pattern of existing room modules. Each room must have constants in `server/src/test_world/constants.rs`. - Integration: Unblocks #506 (cross-room transition tests) in a future sprint. **#500 — Content scaling test** - Existing: The baseline test infrastructure is in place post-#489. Content packs are in `server/src/content/`. - Deliver: A test that runs the baseline NPC pack then the same scenario with additional NPCs, asserts tick timing stays within D-026 budget and behavior is unchanged for original NPCs. - Integration: Feeds into CI perf baseline (#499) which CI team handles. **#514 — blocked_entities debug field** - Existing: `ObserverSnapshot` in `server/src/bridge/`. LOS computation is in `server/src/perception/`. - Deliver: Add `blocked_entities: Vec` (or `Option>`) to `ObserverSnapshot`. Feasibility confirmed at ~300 tile lookups/tick (R2-OQ-05). Debug-only field; `#[serde(default)]` so client gracefully ignores on older snapshots. - Integration: Improves test client debug output. Standalone, no cross-team dependency. **#519 — Walk-away NPC reaction Phase 2** - Existing: Phase 1 (client fade, #437) and Phase 3 (KG recording, #427) are done. Phase 2 is the missing server-side piece. - Deliver: On `PlayerAction::WalkAway` (or dialogue exit event), server triggers: (1) target NPC shifts animation tier to Tier 2 (D-047), (2) NPC routine deviation is recorded in their state machine. D-064 Phase 2 scope. - Integration: Standalone server-side work. No client changes required. **#520 — Confrontation world response** - Existing: Confrontation delivery is wired through dialogue system. D-063 specifies the world response. - Deliver: On confrontation delivery: (1) target NPC shifts to Tier 2 animation (D-047 animated tier), (2) NPC relationship state decremented (affects D-033 color which client #521 renders), (3) monologue spike event emitted. Three separate effects, all server-authoritative. - Integration: Client #521 blocked by this — complete #520 first half of sprint. --- ## Dependency Chain ``` #483 (replay loading) — standalone, parallel #491 (hub teleport server) → #501 (hub teleport client UX, cross-team) #498 (Gauntlet rooms 4-7) → #506 (cross-room transitions, future sprint) #500 (content scaling) → #499 (perf baseline, CI team) #514 (blocked_entities) — standalone, parallel #519 (walk-away phase 2) — standalone, parallel #520 (confrontation world response) → #521 (D-033 color shift, client team) ``` --- ## 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): sprint 10 prove — server" --description "body" --base main --head server ```