docs(02-06): plan UAT gap closure (G1-G4)

Single Wave 0 plan addressing the 4 first-impression UX gaps from the
2026-05-09 live UAT:

- G1 (BLOCKING) src/index.css imported from main.tsx — body bg #1a1a1a,
  serif color #e8e0d0 — closes the white halo around the dark canvas
- G2 (BLOCKING) FirstRunHint component reading externalized
  'Begin where the soil is bare.' from ui-strings.yaml + UiStringsSchema
  extension (Zod default strip mode would otherwise drop the key) +
  session-slice firstRunHintDismissed flag (NOT V1Payload)
- G3 (HIGH) tile-renderer outline brightening 0x4d4d52 → 0x5a5a60 +
  hover bump 0x7a7a82
- G4 (MEDIUM) gate-renderer wall-band Phaser primitive at gate column
  with alpha 0.15-0.20

Phase 3 watercolor + cello deferral preserved: zero painted assets,
zero new npm dependencies, V1Payload unchanged. Plan-checker found
1 BLOCKER (Zod schema strip mode breaking G2 silently) + 1 WARNING
(hint copy ranking pushed non-bible-voice option first); planner
revised; residual frontmatter + 3 copy refs fixed inline.

Plan: 5 tasks, 16 files_modified, depends_on [02-01..02-05],
requirements [GARD-01, AEST-07, UX-01] supplemental coverage.
ROADMAP.md annotated with Wave 1/Wave 2 headers.

Next: /gsd-execute-phase 2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-09 12:05:52 -04:00
parent 6f680f4731
commit 0ed79b0eb1
3 changed files with 1476 additions and 12 deletions
+3
View File
@@ -57,9 +57,12 @@ Plans:
5. A Playwright e2e smoke test passes: it loads the game, dismisses the begin gate, plants a seed, fast-forwards growth, harvests a fragment, verifies the fragment text appears in the journal, refreshes the page, and verifies the harvested fragment persists. Story progression gates on tick count (not wall time), so manipulating the system clock cannot fast-forward through Lura's authored beats. 5. A Playwright e2e smoke test passes: it loads the game, dismisses the begin gate, plants a seed, fast-forwards growth, harvests a fragment, verifies the fragment text appears in the journal, refreshes the page, and verifies the harvested fragment persists. Story progression gates on tick count (not wall time), so manipulating the system clock cannot fast-forward through Lura's authored beats.
**Plans:** 5 plans **Plans:** 5 plans
Plans: Plans:
**Wave 1**
- [x] 02-01-foundations-PLAN.md — BigQty + Zustand 5 store + tick scheduler + V1Payload extension + save lifecycle hooks + Phaser EventBus singleton + ESLint sim-purity rule (Wave 0; foundations every other Phase-2 plan depends on) ✓ 2026-05-09 (12 min) — see 02-01-foundations-SUMMARY.md - [x] 02-01-foundations-PLAN.md — BigQty + Zustand 5 store + tick scheduler + V1Payload extension + save lifecycle hooks + Phaser EventBus singleton + ESLint sim-purity rule (Wave 0; foundations every other Phase-2 plan depends on) ✓ 2026-05-09 (12 min) — see 02-01-foundations-SUMMARY.md
- [x] 02-02-begin-plant-grow-PLAN.md — sim/garden core (4×4 grid, 3 plant types, growth state machine, plantSeed) + render layer (Phaser primitives, ready-pulse, tile-coords) + BeginScreen + audio bootstrap + SeedPicker + UI strings (Wave 1; AEST-07, UX-01, GARD-01, GARD-02) ✓ 2026-05-09 (18 min) — see 02-02-begin-plant-grow-SUMMARY.md - [x] 02-02-begin-plant-grow-PLAN.md — sim/garden core (4×4 grid, 3 plant types, growth state machine, plantSeed) + render layer (Phaser primitives, ready-pulse, tile-coords) + BeginScreen + audio bootstrap + SeedPicker + UI strings (Wave 1; AEST-07, UX-01, GARD-01, GARD-02) ✓ 2026-05-09 (18 min) — see 02-02-begin-plant-grow-SUMMARY.md
- [x] 02-03-harvest-journal-fragments-PLAN.md — Season-1 17 authored fragments + sim/memory selector (deterministic mulberry32, gated, no-dup, sentinel fallback for Pitfall 8) + harvest + compost commands (Pitfall 10 post-commit unlock thresholds) + Memory Journal + FragmentRevealModal + JournalIcon + PIPE-02 structural verifier (Wave 1; GARD-03, GARD-04, MEMR-01..06, PIPE-02) ✓ 2026-05-09 (12 min) — see 02-03-harvest-journal-fragments-SUMMARY.md - [x] 02-03-harvest-journal-fragments-PLAN.md — Season-1 17 authored fragments + sim/memory selector (deterministic mulberry32, gated, no-dup, sentinel fallback for Pitfall 8) + harvest + compost commands (Pitfall 10 post-commit unlock thresholds) + Memory Journal + FragmentRevealModal + JournalIcon + PIPE-02 structural verifier (Wave 1; GARD-03, GARD-04, MEMR-01..06, PIPE-02) ✓ 2026-05-09 (12 min) — see 02-03-harvest-journal-fragments-SUMMARY.md
**Wave 2** *(blocked on Wave 1 completion)*
- [x] 02-04-lura-gate-beats-PLAN.md — inklecate compile pipeline + 4 authored .ink files (3 Lura beats + compost acknowledgements) + sim/narrative tick-count gate (1st/4th/8th harvest) + LuraDialogue overlay + InkRenderer drip + Phaser gate visual indicator (Wave 2; STRY-01, STRY-06, STRY-07 vacuous, STRY-10) ✓ 2026-05-09 (24 min) — see 02-04-lura-gate-beats-SUMMARY.md - [x] 02-04-lura-gate-beats-PLAN.md — inklecate compile pipeline + 4 authored .ink files (3 Lura beats + compost acknowledgements) + sim/narrative tick-count gate (1st/4th/8th harvest) + LuraDialogue overlay + InkRenderer drip + Phaser gate visual indicator (Wave 2; STRY-01, STRY-06, STRY-07 vacuous, STRY-10) ✓ 2026-05-09 (24 min) — see 02-04-lura-gate-beats-SUMMARY.md
- [x] 02-05-letter-settings-e2e-PLAN.md — sim/offline + auto-harvest + letter Ink + Letter overlay + Settings (Export/Import/Restore) + persistence-toast + boot-path save lifecycle wiring + URL-flag FakeClock injection + Playwright PIPE-07 e2e (Wave 2; UX-02, UX-10, CORE-03, CORE-11, PIPE-07) ✓ 2026-05-09 (20 min) — see 02-05-letter-settings-e2e-SUMMARY.md - [x] 02-05-letter-settings-e2e-PLAN.md — sim/offline + auto-harvest + letter Ink + Letter overlay + Settings (Export/Import/Restore) + persistence-toast + boot-path save lifecycle wiring + URL-flag FakeClock injection + Playwright PIPE-07 e2e (Wave 2; UX-02, UX-10, CORE-03, CORE-11, PIPE-07) ✓ 2026-05-09 (20 min) — see 02-05-letter-settings-e2e-SUMMARY.md
**UI hint**: yes **UI hint**: yes
+12 -12
View File
@@ -2,16 +2,16 @@
gsd_state_version: 1.0 gsd_state_version: 1.0
milestone: v1.0 milestone: v1.0
milestone_name: milestone milestone_name: milestone
status: gaps_found status: ready_to_execute
stopped_at: "Phase 2 executed end-to-end (5/5 plans, 312/312 vitest, Playwright PIPE-07 green, npm run ci exits 0). gsd-verifier scored 24/24 REQ-IDs structurally PASS and routed 6 tone/live-loop items to HUMAN-UAT.md. Live UAT (user dev-server walkthrough) surfaced 4 first-impression UX gaps that block phase sign-off — these are NOT Phase-3 aesthetic deferrals, they are minimum-viable functional UX gaps: G1 no global page CSS (white halo around dark canvas), G2 no first-run prompt after Begin (player confused — A Dark Room rule violated), G3 dim tile outlines (grid reads as 'gray check block'), G4 isolated gate visual (no surrounding wall context). Gaps documented in 02-VERIFICATION.md frontmatter (status: gaps_found). Phase 3 watercolor + cello deferral preserved — every G-fix uses Phaser primitives or one CSS file, no painted assets. HUMAN-UAT.md tone items (Lura voice, letter cadence) remain pending below the structural gaps and will be re-reviewed after gap closure. Next: /gsd-plan-phase 2 --gaps." stopped_at: "Phase 2 gap-closure plan (Plan 02-06 uat-gap-closure) created via /gsd-plan-phase 2 --gaps. Single new plan addresses 4 first-impression UX gaps from 2026-05-09 live UAT: G1 (BLOCKING) src/index.css for global page bg #1a1a1a / no white halo; G2 (BLOCKING) FirstRunHint component reading externalized 'Begin where the soil is bare.' from ui-strings.yaml + UiStringsSchema extension (Zod default strip mode would otherwise drop the key) + session-slice firstRunHintDismissed flag; G3 (HIGH) tile-renderer outline brightening 0x4d4d52→0x5a5a60 + hover bump 0x7a7a82; G4 (MEDIUM) gate-renderer wall-band Phaser primitive at gate column with alpha 0.15-0.20. Plan is Wave 0, depends_on [02-01..02-05], 5 tasks (4 gap fixes + e2e integration), 16 files_modified, requirements [GARD-01, AEST-07, UX-01] supplemental coverage. Phase 3 watercolor + cello deferral preserved (zero painted assets, zero new npm deps, V1Payload unchanged). Plan-checker found 1 BLOCKER + 1 WARNING on first pass; planner revised; residual frontmatter + 3 copy refs fixed inline. ROADMAP.md annotated with Wave 1/Wave 2 headers (annotate-dependencies). Next: /gsd-execute-phase 2 to run Plan 02-06; then /gsd-verify-work to flip 02-VERIFICATION.md status gaps_found → verified and re-route to the 6 HUMAN-UAT.md tone items."
last_updated: "2026-05-09T15:55:00.000Z" last_updated: "2026-05-09T16:10:00.000Z"
last_activity: 2026-05-09 last_activity: 2026-05-09 -- Phase 2 gap-closure plan created (Plan 02-06)
progress: progress:
total_phases: 8 total_phases: 8
completed_phases: 1 completed_phases: 1
total_plans: 12 total_plans: 13
completed_plans: 12 completed_plans: 12
percent: 22 percent: 23
--- ---
# Project State # Project State
@@ -21,16 +21,16 @@ progress:
See: .planning/PROJECT.md (updated 2026-05-08) See: .planning/PROJECT.md (updated 2026-05-08)
**Core value:** Every idle mechanic must function as a metaphor that the player absorbs without being told. When economy and meaning conflict, meaning wins. **Core value:** Every idle mechanic must function as a metaphor that the player absorbs without being told. When economy and meaning conflict, meaning wins.
**Current focus:** Phase 02 — Season 1 Vertical Slice (Soil) — 5/5 plans done + verifier 24/24 PASS, but live UAT found 4 first-impression UX gaps. Awaiting `/gsd-plan-phase 2 --gaps`. **Current focus:** Phase 02 — Season 1 Vertical Slice (Soil) — 5/5 plans executed + 24/24 REQ-IDs PASS; gap-closure Plan 02-06 created and ready to execute. Next: `/gsd-execute-phase 2`.
## Current Position ## Current Position
Phase: 02 (season-1-vertical-slice-soil) — 5/5 plans executed; verifier 24/24 PASS; live UAT found 4 blocking/high gaps; status: gaps_found Phase: 02 (season-1-vertical-slice-soil) — 5/5 prior plans executed; verifier 24/24 PASS; gap-closure Plan 02-06 created; status: ready_to_execute
Plans: 5 of 5 created (3 waves); Wave 0 (02-01) DONE; Wave 1 (02-02 + 02-03) DONE; Wave 2 (02-04 + 02-05) DONE; gap-closure plan pending Plans: 6 of 6 created (Wave 0 + Wave 1 + Wave 2 done; new Wave 0 gap-closure plan pending execution)
Status: All 5 Phase-2 plans executed cleanly (12 atomic feature commits + 5 doc commits). 312/312 vitest green; Playwright PIPE-07 e2e green in 1.6s; npm run ci exits 0. gsd-verifier scored 24/24 REQ-IDs structurally PASS and surfaced 6 inherently subjective tone/live-loop items in HUMAN-UAT.md. User ran the dev server (first live UAT) and reported 4 first-impression UX gaps that the test suite cannot detect: G1 white halo around dark canvas (no global page CSS), G2 no first-run prompt after Begin (A Dark Room rule violated), G3 tile outlines too dim against canvas bg, G4 gate visual stands alone with no wall context. All 4 are minimum-viable functional UX gaps — Phase 3 watercolor deferral preserved (every fix uses Phaser primitives or one CSS file). VERIFICATION.md updated to status: gaps_found with structured gap entries. The HUMAN-UAT.md tone items remain pending below the structural gaps. Status: Ready to execute (Plan 02-06)
Last activity: 2026-05-09 -- Phase 2 execute complete; live UAT surfaced 4 UX gaps; awaiting /gsd-plan-phase 2 --gaps Last activity: 2026-05-09 -- Phase 2 gap-closure plan created via /gsd-plan-phase 2 --gaps
Progress: [██░░░░░░░░] 22% Progress: [██░░░░░░░░] 23%
## Verification Results ## Verification Results
File diff suppressed because it is too large Load Diff