# Sprint 38: Depth — Client Tasks **Goal:** Map the generation pipeline from planetary heightmaps to walkable tile environments, formally park character/apartment work behind the full cascade, and close test/infra debt from Sprint 37. **Branch:** `sprint-38/client` **Agents:** Stig (dev), Tyre (arch), Hoshe (QA) ## New Tickets | # | Title | Priority | Blocked by | |---|-------|----------|------------| | #898 | Free camera viewer — WASD pan + scroll zoom, implant/atlas/map access | high | — | | #882 | Strip archetype-driven client code | medium | — | | #879 | Revive fog state behavioral tests | medium | — | | #867 | dialogue_box confrontation_monologue signal bug | medium | — | | #871 | Pre-existing test failures — umbrella triage | medium | — | Use `tooling/db/ticket show ` for full details. ## Key Decisions - `decisions/architecture.md` — D-169 (implant UI components), D-170 (HUD visibility) - Implant component library: `client/ui/implant/` (ImplantPanel, ImplantHeader, etc.) - HUD layer manager: `client/scripts/autoloads/hud_groups.gd` ## Notes **#898 — Free camera viewer (bare minimum, throwaway)** - The rendering system is up in the air — this viewer is iterative/disposable. Do not over-engineer. - Current camera is locked to `GameState.player_position` (`client/scripts/autoloads/game_state.gd:18`). - Decouple: add a debug/observer mode where camera position is independent of player entity. - Controls: WASD/arrow key pan, scroll-to-zoom. That's it. - The observer needs access to: implants (D-169/D-170 UI system), atlas, and map. Wire up existing `HudGroups` app paths (`implant/map`, `implant/wiki/gttr`, etc.). - No player entity needed. No server-side observer entity. Just a free camera over whatever tile data exists. - Key files: `client/main.gd` (camera setup), `client/scripts/autoloads/game_state.gd` (player_position), `client/scripts/autoloads/hud_groups.gd` (implant app switching). **#882 — Strip archetype client code** - Follow-up to server #878 (done). `CharacterArchetype` trace is Phase 6 filler. - Find all client references to archetype enums/types and remove them. - #878 already removed the server side — client should have no remaining consumers. **#879 — Revive fog state behavioral tests** - `test_fog_sprint22.gd` was deleted in Sprint 37 (#870 parse-error cleanup). - Contained unique behavioral tests: `EXP_EXPLORED` persistence after leaving LOS, grow-only bounds invariant. - Rewrite against current `FogState` API. Prefer live Gauntlet testing over mocks per testing preferences. **#867 — dialogue_box confrontation signal bug** - `signal_fired` remains false after `_on_option_pressed(0)` on a confrontation option. - `_start_confrontation_beat` likely not firing in headless test mode. - Check signal wiring in `client/ui/dialogue_box.gd`. **#871 — Pre-existing test failures umbrella triage** - 13 suites affected. For each: investigate, determine if it's stale assertion or real regression, then either fix inline or create a child ticket. - Per feedback rules: broken tests need a fix or a dated ticket, never a shrug. ## Dependency Chain ``` #898 (free camera viewer) → standalone, start immediately #882 (strip archetype code) → standalone (#878 done) #879 (fog tests) → standalone #867 (signal bug) → standalone #871 (test triage) → standalone, spawns child tickets ``` ## PR Workflow When ready to submit, create a PR with `tea` CLI: ```bash tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(client): sprint 38 client" --description "body" --base main --head sprint-38/client ```