Files
TheLastGarden/.planning/phases/02-season-1-vertical-slice-soil/02-DISCUSSION-LOG.md
T
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

16 KiB
Raw Blame History

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.