feat(ui): YAML UI string system + interaction prompt (#409) #20

Closed
jpmschweitzer wants to merge 0 commits from client into main
Owner

Summary

Sprint 5 client delivery — adds a YAML-based UI string loading system for ticket #409 (UI microcopy).

  • UIStrings autoload with minimal YAML parser, get_text("dotted.key") lookup, fallback-to-key on miss
  • 38 strings across 5 categories: interaction, hud, knowledge, relationship, tutorial
  • HUD labels (Mode:, Time:, Health:) and interaction prompt prefix (E -) now loaded from client/data/ui-strings.yaml
  • 16 new gdUnit4 tests — parser (comments, quotes, sections, empty lines), autoload registration, key lookup, missing key fallback
  • All 131 tests pass (16 new + 115 existing)

Copy team can now edit client/data/ui-strings.yaml to add/revise strings without touching GDScript.

Test plan

  • make test-client — 131/131 pass, 0 errors, 0 failures
  • Manual: verify HUD shows Mode: Normal not hud.mode_label: Normal
  • Manual: verify interaction prompt shows E - Talk near NPC
## Summary Sprint 5 client delivery — adds a YAML-based UI string loading system for ticket #409 (UI microcopy). - **UIStrings autoload** with minimal YAML parser, `get_text("dotted.key")` lookup, fallback-to-key on miss - **38 strings** across 5 categories: interaction, hud, knowledge, relationship, tutorial - **HUD labels** (`Mode:`, `Time:`, `Health:`) and **interaction prompt prefix** (`E -`) now loaded from `client/data/ui-strings.yaml` - **16 new gdUnit4 tests** — parser (comments, quotes, sections, empty lines), autoload registration, key lookup, missing key fallback - All 131 tests pass (16 new + 115 existing) Copy team can now edit `client/data/ui-strings.yaml` to add/revise strings without touching GDScript. ## Test plan - [x] `make test-client` — 131/131 pass, 0 errors, 0 failures - [ ] Manual: verify HUD shows `Mode: Normal` not `hud.mode_label: Normal` - [ ] Manual: verify interaction prompt shows `E - Talk` near NPC
jpmschweitzer added 2 commits 2026-02-13 17:18:43 +01:00
Adds UIStrings autoload that loads display text from a YAML file,
replacing hardcoded strings in HUD and interaction prompt. Copy team
can now author UI microcopy in client/data/ui-strings.yaml without
touching GDScript. Includes 38 strings across 5 categories and 16
gdUnit4 tests for the parser and lookup API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Owner

Review: client -> main (PR #20)

Hoshe (Code Quality): APPROVE

Well-tested (15 tests, 114% test-to-code ratio), clean integration into HUD and interaction prompt. Fallback-to-key prevents crashes. Hot-reload support is a nice dev convenience.

Tyre (Architecture): APPROVE

Architecturally correct — UI labels are client rendering concerns per D-020, not game content. client/data/ is the right location. D-042 will be updated to match implementation (documentation fix, not code fix).

Verdict: APPROVED

Note: D-042 in decisions/architecture.md will be corrected to reflect client/data/ui-strings.yaml path and remove reference to non-existent content loader.

## Review: client -> main (PR #20) ### Hoshe (Code Quality): APPROVE Well-tested (15 tests, 114% test-to-code ratio), clean integration into HUD and interaction prompt. Fallback-to-key prevents crashes. Hot-reload support is a nice dev convenience. ### Tyre (Architecture): APPROVE Architecturally correct — UI labels are client rendering concerns per D-020, not game content. `client/data/` is the right location. D-042 will be updated to match implementation (documentation fix, not code fix). ### Verdict: APPROVED Note: D-042 in `decisions/architecture.md` will be corrected to reflect `client/data/ui-strings.yaml` path and remove reference to non-existent content loader.
jpmschweitzer closed this pull request 2026-02-13 17:39:46 +01:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jpmschweitzer/settled-reach#20