--- title: "Sprint 10 — Client Briefing" description: "Hub teleport UX, room reset UX, auto-checklist progress tracking" type: sprint status: archived sprint: 10 team: "client" --- # Sprint 10: Prove — Client 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:** `client` **Agents:** Stig (UI/client dev), Tyre (arch review), Hoshe (QA) --- ## Carry-over from Sprint 9 | # | Title | Status | Notes | |---|-------|--------|-------| | #501 | Hub teleport client UX (Home key, fade transition) | backlog | Targeted Sprint 9, slipped — blocked by #491 server work which also slipped. Unblocks immediately once server #491 ships. | | #502 | Room reset client UX (reset plate tile, interaction verb, amber flash) | backlog | Targeted Sprint 9, slipped. Unblocked (#490 done). | | #503 | Auto-checklist progress tracking (client-side snapshot evaluation) | backlog | Targeted Sprint 9, slipped. Unblocked (#497 done). | --- ## New Tickets | # | Title | Blocked by | |---|-------|------------| | #501 | Hub teleport client UX (Home key, fade transition) | #491 server (Sprint 10) | | #502 | Room reset client UX (reset plate tile, interaction verb, amber flash) | #490 (done) | | #503 | Auto-checklist progress tracking (client-side snapshot evaluation) | #497 (done) | | #517 | Introduce Michroma as game font | — | | #526 | Client: mouse-relative facing and movement (D-054) | — | | #518 | Client: wire insert open/close to PauseSimulation command | — | | #521 | Confrontation D-033 color shift — client-side entity tint | #520 server (Sprint 10) | Use `db/connectors/ticket show ` for full details. --- ## Key Decisions - `decisions/architecture.md` — D-020 (Godot/Rust IPC), D-054 (mouse-relative facing), D-058 (auto-pause on insert open), D-066 (dual-scale grid) - `decisions/perception.md` — D-033 (entity color = relationship to player), D-056 (insert diegetic visibility), D-057 (interaction verbs), D-060 (cognitive delay), D-063 (confrontation same box) - `decisions/scope.md` — D-053 (movement stance toggle) --- ## Open Questions to Resolve Early - **Q-019 (partial): Client-side entity lifecycle / StableId mapping** — #521 reads relationship state from `ObserverSnapshot` and adjusts entity tint. Confirm with server team that relationship state is included in the snapshot before #521 starts. Resolve before #521 begins. --- ## Notes **#501 — Hub teleport client UX** - Existing: `client/scripts/protocol/protocol.gd` handles PlayerAction serialization. `client/scripts/rendering/world_renderer.gd` handles camera. - Deliver: Home key sends `PlayerAction::TeleportToHub`. On receipt: instant camera snap to hub spawn position + 0.3s fade-to-black-and-back tween. Effort: 0.5d. Gauntlet-mode only guard matches server behavior. - Dependency: Wait for server #491 to merge before testing end-to-end. Can develop and unit-test client logic in isolation using local bridge stub. **#502 — Room reset client UX** - Existing: `client/scripts/rendering/tile_renderer.gd` handles tile visual overrides. Interaction verbs rendered by UI layer. - Deliver: (1) `reset_plate` tile type renders with amber color override. (2) 'Reset Room' verb appears when player faces reset plate. (3) On reset confirmation: 0.15s amber flash + monologue "Systems recalibrated." fires via monologue event. Effort: 0.5d. - Integration: Server #490 (done) already emits the reset event. Client just needs to consume it. **#503 — Auto-checklist progress tracking** - Existing: Checklist YAML schema defined by CI #497 (done). The test client handles its own evaluation separately. - Deliver: Client evaluates `ObserverSnapshot` against loaded checklist YAML conditions, auto-tracks verification items with a Gauntlet-mode HUD overlay. Full tracking in test-client-only mode; lightweight overlay in Godot per R2-OQ-06. Effort: 1.5d. - Integration: Test-client-only overlay — does not affect production game HUD. Coordinate with Hoshe on checklist condition format. **#517 — Michroma font** - Existing: Default Godot font throughout client UI. No font assets committed yet. - Deliver: Download Michroma from Google Fonts (OFL license), commit to `client/assets/fonts/`. Update all Label, RichTextLabel, and LineEdit nodes to use Michroma. Acceptance: font renders legibly in HUD, dialogue box, and debug overlay at game resolution. Effort: 0.5d. Purely cosmetic — no logic changes. - Non-obvious: Michroma is geometric sans-serif at display weights — confirm legibility at small sizes (sub-16px tooltip text) before committing globally. Consider a size floor. **#526 — Mouse-relative facing and movement** - Existing: `client/scripts/main.gd` handles input. WASD currently uses fixed cardinal directions. `client/scripts/protocol/protocol.gd` sends facing octant to server. - Deliver: Mouse position determines facing direction (client-side float computed from player screen position to cursor). WASD movement becomes mouse-relative (forward = toward cursor). Server receives facing octant only, unchanged interface. Effort: 1d. - Key decision: D-054 — mouse facing is purely client-side. Server only ever sees the octant. The full float stays in the client for rendering purposes. **#518 — Wire insert open/close to PauseSimulation** - Existing: Server pause system at 50%/0% tick rate exists (#406, done). `client/scripts/autoloads/sim_bridge.gd` handles server commands. Insert UI open/close events are in `client/scripts/main.gd`. - Deliver: When insert UI opens, client sends `PauseSimulation` command. When it closes, client sends `ResumeSimulation`. D-058 confirms auto-pause in SP mode. Ticket #448 was cancelled before client wiring was completed. Effort: 0.5d. - Non-obvious: The pause/resume must be idempotent — if the server is already paused (e.g. Gauntlet room interlude), opening the insert should not double-pause. **#521 — Confrontation D-033 color shift** - Existing: `client/scripts/rendering/entity_renderer.gd` applies D-033 relationship colors. `ObserverSnapshot` carries entity relationship state. - Deliver: On confrontation delivery (server #520 decrements relationship state), entity renderer fades the entity's D-033 tint toward the new relationship color using a 0.5-1s tween. Not an instant flip — a fade that the player perceives as "something changed." - Dependency: Blocked by server #520. Start after #520 merges. --- ## Dependency Chain ``` #502 (room reset UX) — standalone (server #490 done) #503 (auto-checklist) — standalone (CI #497 done) #517 (Michroma font) — standalone, parallel #518 (insert pause wire) — standalone, parallel #526 (mouse-relative facing) — standalone, parallel Server #491 (hub teleport) → #501 (hub teleport UX) Server #520 (confrontation response) → #521 (D-033 color shift) ``` --- ## 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(client): sprint 10 prove — client" --description "body" --base main --head client ```