Files
josh 69964ba17f docs(02): capture phase context
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>
2026-05-09 01:39:48 -04:00

312 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (57 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 |
|--------|-------------|----------|
| 23 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. | |
| 46 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 |
|--------|-------------|----------|
| ~25 minutes | Cozy but watchable; lets a playtest session complete the loop in ~10 minutes. | ✓ |
| ~30 seconds 2 minutes | Demo-pace; reads less 'idle'. | |
| ~1560 minutes | True idle; hard to playtest end-to-end without a debug fast-forward. | |
| ~612 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 25min band.
- Exact fragment-count thresholds for plant unlocks and Lura beats (model is locked, values may shift ±12 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 410Hz).
- 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.