69964ba17f
Phase 2 (Season 1 Vertical Slice — Soil) discuss-phase output. 02-CONTEXT.md captures 34 implementation decisions across 8 gray areas (garden geometry & input · time density · Lura's arc · letter composition · Begin screen · Memory Journal · plant placeholders · Phase-2 Settings UI scope). Locks the 4×4 grid + click+inline seed picker, 2–5min growth band per plant with auto-harvest-while-offline, 3 Lura gate visits gated by 1st/4th/8th harvest, authored Ink letter skeleton with templated slots, full-screen letter on ≥5min absence, tasteful placeholder Begin screen (Phase 3 paints), full- screen Journal modal revealing after first harvest, simple Phaser-primitive plants with subtle ready-state pulse, save-management-only Settings. Phase 2's first commits: BigQty wrapper, Zustand 5 store, tick scheduler. Save schema is a v1 *extension*, not v1→v2. 02-DISCUSSION-LOG.md preserves the alternatives considered for human review. Next: /gsd-plan-phase 2 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
312 lines
16 KiB
Markdown
312 lines
16 KiB
Markdown
# Phase 2: Season 1 Vertical Slice (Soil) - Discussion Log
|
||
|
||
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
|
||
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
|
||
|
||
**Date:** 2026-05-09
|
||
**Phase:** 2 — Season 1 Vertical Slice (Soil)
|
||
**Areas discussed:** Garden geometry & input · Time density (growth + offline) · Lura's Season 1 arc shape · Letter-from-the-garden composition · Begin screen treatment · Memory Journal access + layout · Visual placeholder treatment for plants · Phase 2 Settings UI scope
|
||
|
||
---
|
||
|
||
## Garden Geometry & Input
|
||
|
||
### Garden shape
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Small fixed grid (4×4 = 16 tiles) | Intimate walled-garden feel; matches cozy/contemplative tone and Phase 2 minimum-viable bias. | ✓ |
|
||
| Medium fixed grid (6×6 = 36 tiles) | More room to experiment and more strategic depth, but Season 1 will feel emptier with sparse early plantings and authored-content scope grows. | |
|
||
| Freeform / non-grid (5–7 named planting points) | Bespoke, painterly walled-garden feel. More work upfront and harder to cleanly extend in Seasons 2+. | |
|
||
|
||
### Seed placement input
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Click empty tile → inline seed picker | Clicking an unoccupied tile pops a small inline picker. Honors UX-01 'no UI clutter'. | ✓ |
|
||
| Persistent seed sidebar + click empty tile | More discoverable but introduces a permanent UI element that fights the A Dark Room rule. | |
|
||
| Drag-from-inventory to tile | Tactile, but more failure modes and more Phase 3 polish to feel right. | |
|
||
|
||
### Plant type count
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| 2–3 plant types | Player exercises real choice; small enough to author + concept-art under Phase 2's minimum-viable bias. | ✓ |
|
||
| Just 1 plant type | Most minimum-viable possible; risks slice feeling like a single-mechanic demo. | |
|
||
| 4–6 plant types | Richer Season 1 with more variety, but ≈4× the authored-content + concept-art surface. | |
|
||
|
||
### Seed supply
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Infinite seeds from start | Anti-FOMO; meaningful constraint is *time*, not seed inventory. | ✓ |
|
||
| Harvest yields seeds + fragment | Adds a light economy; risks turning the cozy slice into a resource-management loop. | |
|
||
| Limited starter seeds + replenish via composting | Couples composting and planting tightly; risks player feeling soft-locked. | |
|
||
|
||
### Plant unlock progression
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| First plant from start, others unlock by fragment-count | Drip-feeds discovery without ceremony. | ✓ |
|
||
| All available from start | Simplest sim; loses small but real beat of progression. | |
|
||
| Unlocks tied to specific authored fragments | Most narrative; brittle if deterministic selector reorders things. | |
|
||
|
||
### Empty tile look in Phase 2
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Faint outlined tile + subtle hover state | Readable but unembellished; Phaser primitive; no asset work. | ✓ |
|
||
| Visible 'empty plot' placeholder texture | More legible at a glance, but bakes in a visual Phase 3 will throw away. | |
|
||
| Invisible tiles (only become visible on hover) | Maximum tonal restraint; risks confusing first-time players. | |
|
||
|
||
### Post-harvest tile state
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Returns to empty + brief acknowledgement | Fastest loop, cleanest sim, honors cozy 'release' feel. | ✓ |
|
||
| Leaves a 'spent' state for a short cooldown | Adds an extra plant lifecycle state to sim and save schema. | |
|
||
| Fragment must be 'taken to the journal' first | Tactile but couples sim and UI tightly and adds dangling state. | |
|
||
|
||
---
|
||
|
||
## Time Density (Growth + Offline)
|
||
|
||
### First-plant growth duration in active play
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| ~2–5 minutes | Cozy but watchable; lets a playtest session complete the loop in ~10 minutes. | ✓ |
|
||
| ~30 seconds – 2 minutes | Demo-pace; reads less 'idle'. | |
|
||
| ~15–60 minutes | True idle; hard to playtest end-to-end without a debug fast-forward. | |
|
||
| ~6–12 hours (long-form idle) | Anchors 24h cap; risks empty active play; demands strong return-screen. | |
|
||
|
||
### Per-plant duration variance
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Vary (short / medium / longer) within band | Real time-vs-yield tradeoffs; tonal identity per plant. | ✓ |
|
||
| All identical growth times | Simplest sim; loses 'patience-is-rewarded' beat. | |
|
||
| All identical for Phase 2; vary later | Avoids re-litigating; means Season 1 plants feel interchangeable. | |
|
||
|
||
### Ready-state behavior
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Auto-harvest during offline; manual in active play | Cleanest idle-game shape; lets the letter tell a story. | ✓ |
|
||
| Wait indefinitely — manual always | Maximum agency; offline payoff feels thin. | |
|
||
| Decay if unharvested past a threshold | Adds tension and soft FOMO undercurrent — likely runs into anti-FOMO doctrine. | |
|
||
|
||
### 24h offline cap surfacing
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Capped silently in the letter's voice | Anti-FOMO; tonally consistent. | ✓ |
|
||
| Explicit cap notice in the letter | Honest about the cap; risks reading as a system message. | |
|
||
| Cap silently and never mention it | Cleanest tone; player returning after 3 days might be confused. | |
|
||
|
||
---
|
||
|
||
## Lura's Season 1 Arc Shape
|
||
|
||
### Lura form
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Discrete visits at the gate | Bounded each visit; matches bible's 'she appears at the garden gate' framing. | ✓ |
|
||
| Single ongoing text-message thread | More 'friend texting,' but loses gate-arrival beat. | |
|
||
| Hybrid: gate + occasional texts between visits | Two narrative-state mechanisms; risks Phase-2 scope creep. | |
|
||
|
||
### Beat count
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| 3 beats: arrival · mid · farewell | Tight Season 1 arc; small authoring surface; load-bearing for tone. | ✓ |
|
||
| 5 beats (arrival, two mid, late, farewell) | More texture; doubles authoring + Ink-state plumbing surface. | |
|
||
| Just 1 arrival beat in Phase 2 | Simplest; Season 1 loses tonal anchor and prologue feels unfinished. | |
|
||
|
||
### Beat gating
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Fragment count thresholds (1st / 4th / 8th harvest) | Simple, content-coupled, robust to varying play sessions. STRY-10 satisfied. | ✓ |
|
||
| Specific authored-fragment IDs unlock specific beats | Most narratively rich; brittle if selector reorders things. | |
|
||
| Pure tick-count thresholds | Cleanest against STRY-10; least responsive to player action. | |
|
||
|
||
### Beat-fire UX
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Subtle gate indicator + player-initiated visit | Honors A Dark Room rule and player's pace. | ✓ |
|
||
| Auto-opens dialogue when beat fires | Disrupts gardening flow; less cozy. | |
|
||
| Queues silently; player finds Lura by clicking gate when curious | Most A-Dark-Room; risks player missing all 3 beats. | |
|
||
|
||
---
|
||
|
||
## Letter-from-the-Garden Composition
|
||
|
||
### Composition method
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Authored skeleton + templated insertions | Best balance of voice and reactivity. | ✓ |
|
||
| Fully procedural from event-log templates | Risks tonal drift; voice depends on templates not authoring. | |
|
||
| Fully hand-authored prose, conditional inclusion only | Maximum voice control; least reactive. | |
|
||
|
||
### Authoring format
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Ink (.ink files in /content/dialogue/) | Reuses STRY-06 stack — one runtime path, one tooling path. | ✓ |
|
||
| Markdown with frontmatter (in /content/letters/) | Aligns with fragment authoring; adds a second narrative-rendering path. | |
|
||
| Both — Ink for branching, Markdown for prose passages | Maximum power; introduces a third loader path. | |
|
||
|
||
### Offline event log scope
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Compact summary (counts + IDs of bloomed/harvested + any unfired Lura beat) | Compact, sufficient, bounded in size. | ✓ |
|
||
| Full ordered timeline (every state transition with timestamp) | Most powerful; biggest schema surface and storage cost. | |
|
||
| Just last/biggest event(s) | Smallest schema; letter has less to say across multiple returns. | |
|
||
|
||
### Letter UX (when shown / dismiss)
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| On return after ≥5 minutes; full-screen overlay; one tap to dismiss | Avoids letter-spam; full-screen honors tonal weight. | ✓ |
|
||
| Always show on tab return regardless of duration | Most consistent; risks feeling intrusive. | |
|
||
| Inline pane (slides in from a corner) | Less disruptive; loses 'sit with this' tonal beat. | |
|
||
|
||
---
|
||
|
||
## Begin Screen Treatment
|
||
|
||
### Phase 2 vs Phase 3 split
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Tasteful placeholder; Phase 3 paints | Honors no-aesthetic-polish bias; avoids Phase 3 rework. | ✓ |
|
||
| Real painted gesture-gate now | Strongest first impression today; pulls Phase 3 work earlier and risks scope creep. | |
|
||
| Title text only (no visual treatment) | Most-A-Dark-Room; risks reading as unfinished. | |
|
||
|
||
### Subsequent-load behavior
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Every load (browser autoplay policy demands it) | Honest with browser constraints; Recommended option. | |
|
||
| Only first run; subsequent loads skip to garden + audio enables on first interaction | Smoother return; brief silent moment until first interaction. | ✓ |
|
||
| Only first run; explicit 'enable sound' prompt later | Two surfaces to maintain; risks system-message feel. | |
|
||
|
||
**Notes:** User picked the smoother-return path, accepting the brief silent moment until the first interaction as a worthwhile tradeoff for cozy pacing. CORE-05 + AEST-07 are both still satisfied — the gesture happens on first run; subsequent loads use any first interaction as the gesture.
|
||
|
||
---
|
||
|
||
## Memory Journal Access + Layout
|
||
|
||
### Open mechanism
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Small persistent icon + keyboard shortcut | Most discoverable without violating UX-01; Recommended option. | |
|
||
| Reveals after first harvest, then persistent | Most A-Dark-Room (UI grows as player progresses). | ✓ |
|
||
| Hidden until journal hotkey is discovered | Maximum tonal restraint; high risk players miss it. | |
|
||
|
||
### Layout
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Slide-in side panel; click a fragment to expand inline | Garden stays visible; lets player feel rooted; Recommended option. | |
|
||
| Full-screen modal overlay; back button to return to garden | More tonal weight per visit; player can't see plants ripening while reading. | ✓ |
|
||
| Dedicated 'journal view' you navigate to, like a separate room | Most narratively rich; biggest implementation lift. | |
|
||
|
||
### New-fragment surfacing in active play
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Immediate full-text reveal modal; dismiss to return to garden | Honors harvest as a small event; creates a memorable beat. | ✓ |
|
||
| Quiet deposit — small acknowledgement, find it in journal later | Most A-Dark-Room; risks player never reading the prose. | |
|
||
| Inline reveal at the harvested tile; tap to dismiss | Tactile but fragile (DOM positioned over Phaser canvas resizes). | |
|
||
|
||
---
|
||
|
||
## Visual Placeholder Treatment for Plants
|
||
|
||
### Plant look per growth stage
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Simple Phaser-primitive shape per stage, single color per type | No PNG asset work; firewall stays clean; Phase 3 swaps in painted sprites. | ✓ |
|
||
| Programmer-art sprite per stage per plant (PNG placeholders) | Differentiates more legibly; produces throwaway assets that go through provenance gate. | |
|
||
| Text labels at the tile instead of any visual | Most A-Dark-Room; reads as severe. | |
|
||
|
||
### Ready-state cue
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Subtle glow / pulse on ready tiles | Reads at a glance without text; Phase 3 paints over with warmer light. | ✓ |
|
||
| Bright color shift on the placeholder shape | Most legible; bakes a specific color Phase 3 will rework. | |
|
||
| Text indicator at tile ('ready') | Very explicit; least cozy. | |
|
||
|
||
---
|
||
|
||
## Phase 2 Settings UI Scope
|
||
|
||
### Settings UI scope
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Save management only (Export/Import + Restore prior snapshot) | Smallest scope that completes deferred Phase-1 surfaces; audio + accessibility stay in Phase 8. | ✓ |
|
||
| Save management + audio sliders | Doesn't fit 'no aesthetic polish' framing; risks dragging in keyboard nav and accessibility. | |
|
||
| No settings menu at all in Phase 2 | Smallest Phase-2 lift; deferred items still aren't player-reachable. | |
|
||
|
||
### Access
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| Small icon in a corner of the main view + keyboard shortcut | Same restraint pattern as Memory Journal affordance. | ✓ |
|
||
| Hidden in a 'cog' on Begin screen + accessible from Lura's gate | Risks burying critical save-recovery affordances. | |
|
||
| Only accessible via hotkey (no visual affordance) | Risks players losing access to save recovery in a crash recovery moment. | |
|
||
|
||
### `navigator.storage.persist()` outcome surfacing
|
||
|
||
| Option | Description | Selected |
|
||
|--------|-------------|----------|
|
||
| One-time soft toast on first save if denied; nothing if granted | Honors UX-01 + cozy tone; respects 'surfaces the result respectfully'. | ✓ |
|
||
| Always show 'persistent storage: yes/no' indicator in Settings only | Player won't know save is at risk if persistence denied. | |
|
||
| Modal dialog if denied | Strongest call to attention; reads anti-cozy. | |
|
||
|
||
---
|
||
|
||
## Claude's Discretion
|
||
|
||
Areas where the user explicitly deferred to implementation choice (full list in CONTEXT.md `<decisions>` § "Claude's Discretion"):
|
||
|
||
- Specific growth-duration values per plant within the 2–5min band.
|
||
- Exact fragment-count thresholds for plant unlocks and Lura beats (model is locked, values may shift ±1–2 in playtest).
|
||
- Form of the post-harvest acknowledgement beat (text / particle / pause).
|
||
- Form of Lura's gate indicator on beat-unlock.
|
||
- Tick rate / sim cadence (likely 4–10Hz).
|
||
- Internal Zustand store slice shapes.
|
||
- Internal Phaser scene tree.
|
||
- Specific copy of Begin screen, persistence-denied toast, post-harvest acknowledgement (must match bible voice; user reviews).
|
||
- e2e fast-forward mechanism (hidden hotkey vs URL flag vs sim-clock injection).
|
||
- Memory Journal empty-state copy.
|
||
|
||
## Deferred Ideas
|
||
|
||
Items mentioned during discussion that belong in other phases (full list in CONTEXT.md `<deferred>`):
|
||
|
||
- Hybrid Lura presence (gate + ambient drip) — possibly Phase 4+.
|
||
- Plant-type unlocks tied to specific authored fragments — possibly Phase 4+.
|
||
- Fully procedural letter from event-log templates — reconsider if slot vocabulary too small in playtest.
|
||
- Audio sliders, keyboard nav, browser-zoom guarantees, color-redundant icons, tab-title bloom, Lura-not-numbers UX — Phase 8.
|
||
- Visual regression for asset library — Phase 8.
|
||
- Roothold prestige, Season transitions, die-off, finite ceiling enforcement, cross-pollination — Phase 4.
|
||
- Memory Storms, place-memory vignettes, Nameless Man's full arc — Phase 5.
|
||
- The Below, ecosystem planting, the Loom, the Archivist — Phase 6.
|
||
- Final binary choice + credits/coda rest state — Phase 7.
|
||
- Watercolor post-process, painted plants, painted Begin screen, solo cello + ambient buses, reduced-motion toggle — Phase 3.
|
||
- Real production-volume AI assets + locked north-star reference set — Phase 5 (Phase 1 IOU AEST-09).
|
||
- Real `migrate_v1_to_v2` — Phase 4 (when Roothold lands). Phase 2 only extends `V1Payload` shape.
|
||
- Compost yielding seeds back — rejected; Phase 4's cross-pollination is the proper place for seed-as-economy.
|
||
- Persistent Settings element on Begin screen — rejected in favor of in-garden corner icon + hotkey.
|