Server (7), client (7), CI (3), audio (1) — 18 tickets total. Gauntlet expansion, audio wiring, client UX polish, CI pipeline. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
7.0 KiB
7.0 KiB
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 <id> 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
ObserverSnapshotand 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.gdhandles PlayerAction serialization.client/scripts/rendering/world_renderer.gdhandles 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.gdhandles tile visual overrides. Interaction verbs rendered by UI layer. - Deliver: (1)
reset_platetile 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
ObserverSnapshotagainst 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.gdhandles input. WASD currently uses fixed cardinal directions.client/scripts/protocol/protocol.gdsends 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.gdhandles server commands. Insert UI open/close events are inclient/scripts/main.gd. - Deliver: When insert UI opens, client sends
PauseSimulationcommand. When it closes, client sendsResumeSimulation. 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.gdapplies D-033 relationship colors.ObserverSnapshotcarries 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):
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(client): sprint 10 prove — client" --description "body" --base main --head client