# Lumenwake 1.10.2 — A readable garden diary

An atmospheric canvas survival game. Collect golden sparks and bring twelve to each of three sleeping stars. Stay near a star to transfer light automatically. Restoring all three wins the expedition.

## Controls

- WASD or arrows: drift. With a mouse, hold and aim on the garden. On touchscreens, touch the garden then drag relative to that point. A short drag moves gently; a longer drag reaches full drift speed. Use another finger for Pulse or Dash.
- Space / Pulse: repel shadows, gather sparks within 230 world units, rescue echoes and grow groves within 180 world units.
- Shift / Dash: briefly accelerate in your movement direction and evade contact damage.
- 1–3: guide to a star. 0: automatic guidance. The Wayfinder menu also selects echoes, groves and havens.
- P or Escape: pause. Leaving the tab pauses automatically.
- Sound: opt into an ambient chord and action sounds.

## New in 1.8

**Keep this garden** stores a validated seed, difficulty and optional daily date in a six-world **Pocket Gardens** collection in the journal. The key is `lumenwake-kept-gardens-v1`. Entries are deduplicated by seed/mode/date, names and palettes are derived from the seed, and older or corrupt data is validated before display. No saved collection content is sent to a server.

Keeping or forgetting a reference works during an expedition, including a reading pause, without changing simulation state. **Return** is disabled for unfinished expeditions and validated again in its handler. Returning prepares the introduction in the stored difficulty; it never starts automatically or restores a running game. Archived daily worlds retain their date and record category. G1 layouts, existing records and memories are preserved.

There is no automatic eviction: when six worlds are kept, a player must explicitly forget one before saving another. Storage failures keep the collection functional in memory for this visit and explain its limited persistence. Forgetting removes only the reference, not the world's code, best time or earned memories. After forgetting a card, focus moves to the collection heading; native dialog close keeps its previous pause/focus behavior.

Verification passed duplicate/capacity/no-eviction checks, exact world/difficulty reproduction after reload, active-run protection, archived daily record isolation, malformed/oversized saved data and unavailable/full storage. Real browser checks covered keeping, reloading, returning, forgetting/focus restoration and blocked writes at desktop, portrait touch, landscape and small reduced-motion sizes. All 80 gameplay routes passed. Six sampled G1 code/difficulty layouts matched v1.7 exactly, and all ten older changelog entries and their rationale were preserved.

## New in 1.7

The **Wayfinder** suggests a stable sleeping-star destination, shows an eight-direction compass bearing, remaining light needed and nearby action. It keeps that star until it awakens, then chooses the nearest remaining sleeping star. The native menu can select any star (including awakened havens), unrescued echo or ungrown grove. A manually selected star remains selected as a haven when it awakens; completed echo/grove destinations revert to automatic guidance. Choosing Auto explicitly picks the nearest eligible destination anew. Star shortcuts are 1–3, and 0 selects Auto; menus and reading dialogs own their keyboard input.

Entering a peaceful stroll resets guidance to Auto and finds the closest remaining echo or grove. After completing all discoveries, it invites an unhurried stroll. Guidance does not change the expedition ending, elapsed time, records or controls. Selected destinations have world and minimap outlines and a distinct off-screen marker. The compass points directly toward the destination; it does not plan a safe path or steer the player.

Navigation consumes no random numbers and does not change initial G1 objects. Restart clears manual selection. The native menu remains available on short landscape screens where the minimap and star progress are hidden. Shared Nightfall links now allow the Drift button to select Drift, independently of the incoming mode.

Only the destination menu intercepts pointer input; compass annotations let garden drags pass through. Short-screen notices are placed beside the compass. Verification covers stable automatic goals, manual havens, completion fallback, eight bearings, pause/reset and native menu key ownership, peaceful discovery guidance, randomness isolation and Nightfall links switching to Drift. All 80 automated gameplay routes passed, along with desktop, portrait touch, landscape and small reduced-motion browser checks. Six sampled G1 code/difficulty layouts matched the published v1.6.1 generator exactly.

## New in 1.6.1

The release diary now separates each change list from its rationale. Older gameplay entries are marked **Retrospective interpretation**: a later reconstruction grounded in the changes, not a verified historical motivation. The two explicitly requested description/diary entries use **Documented human request**. All annotations have their own current timestamp; original release dates and change lists remain intact.

From this revision onward, **Design decisions** contains concise rationale recorded during the revision. Record the goal or problem, chosen approach, expected benefit and material tradeoffs while making decisions, and update the summary to match the final implementation. Do not invent missing motives or claim that functional checks prove player enjoyment or optimal tuning. This is a public decision summary, not an exhaustive reasoning transcript. Every release uses `design: {kind: 'recorded', recordedAt: '<real ISO timestamp>', decisions: ['<concise reason>', ...]}`; the standing requirement is in `AGENTS.md`.

Browser checks passed at all four existing viewport sizes, including rationale labels, separate release/annotation dates, dialog width, scrolling and pause/focus behavior. The replay check now snapshots the real start/restart events synchronously before enemies move, avoiding a timing-sensitive comparison. A source comparison confirmed all eight older release dates and change lists are preserved and gameplay code is unchanged.

## New in 1.6

Each garden has a **G1 code**, a generated name and one of three color palettes. Starting/retrying resets the world PRNG to its seed and resets simulation timing. Background and action particles use independent random streams; decorative counts and reduced-motion settings cannot shift future gameplay randomness. The background reuses its canvas and regenerates only when the seed changes. Initial stars, lights, echoes, groves and enemies are reproducible for a given code and difficulty; player choices still influence the expedition.

The flower button opens a **Garden journal** with existing memories and a garden passport. It can prepare a fresh garden, replay the same garden, load a validated code or copy a URL containing code, difficulty and (for daily gardens) date. Selection is disabled during an unfinished expedition; copying remains available. Clipboard failures offer a selectable read-only link. Selecting a garden returns to the introduction; it never launches a run by itself. Retry and the primary victory button now replay the current garden. Choosing another expedition or leaving a stroll prepares a fresh garden.

**Today's garden** derives its seed from the calendar date in Europe/Zagreb. The selected date remains fixed during a run, even across midnight. Daily records use `lumenwake-daily-g1-YYYY-MM-DD-MODE` and never replace `lumenwake-best-v1` or `lumenwake-best-nightfall-v1`. Date-bearing links validate their seed/date pairing and can replay an archived daily garden. Unknown query parameters are ignored; invalid codes fall back safely. Garden links do not change Site sharing or audience.

G1 codes are `G1-` plus seven base-36 digits encoding a positive unsigned 32-bit seed. Keep the initial G1 generator compatible when adding future features; use a new format if the initial layout algorithm changes. See `AGENTS.md`.

Verification checks identical layouts across sessions and reduced-motion settings, identical replay physics after prior ambient time, daily rollover and daylight-saving boundaries, date/mode record isolation, archived daily links, invalid codes and unavailable storage. Browser checks cover journal selection, active-run protection, code entry, copying and its fallback, retries and daily reloads at four viewport sizes. All 80 simulated collection, rescue and grove routes passed.

## New in 1.5

**Dash** leaves an afterlight at its starting position for 2.2 simulation seconds. Shadows within 380 world units of a decoy pursue the nearest one. Rusher warnings commit to a direction, so existing warnings and charges do not retarget. Safe haven repulsion overrides decoys. Decoys expire, freeze while paused and clear on restart or entering a peaceful stroll; they do not absorb player collision damage.

**Precision pulse** rewards an unstunned rusher within the ordinary pulse radius when its warning has at most 0.25 seconds left or its charge is active. It interrupts the charge, releases three sparks and shortens the next pulse cooldown to two seconds. Every rusher rewards only once, preventing spark farming. Ordinary early pulses retain their existing knockback/stun. Three different deflections in one expedition earn **Shadow dancer**, a fifth memory stored alongside existing discoveries. Peaceful strolls do not award combat memories or change run totals.

The threat indicator and gold warning ring mark the optional timing window. Havens display recovery seconds and a filling ring; recovery still requires nine uninterrupted seconds and resets after leaving. Results include deflections. All effects follow simulation time and pause with the game; decorative motion respects reduced-motion settings.

Verification covers decoy pursuit and expiry, haven priority, committed charge direction, pause/reset, precision timing boundaries, active-charge interruption, one-time rewards, the fifth memory and interrupted healing. Browser checks exercise the real warning, pulse and dash controls, freeze decoys while reading, and show recovery on desktop and phones. All 80 simulated collection, rescue and grove routes still passed.

## New in 1.4

Three optional **moonseed groves** grow in varied locations on the outer sides of the stars. Pulse within 180 world units to grow one. Each grows once, releases six sparks and restores one life during an expedition (up to five). Blooming groves appear as filled square minimap markers; seeds use outlined squares. Their growth pauses with play; decorative movement becomes static for reduced-motion users.

**Wild Bloom** requires an expedition victory with all three echoes rescued and all three groves grown. Stars alone still win; Full Bloom still requires stars and echoes. A peaceful stroll can grow remaining seeds and earn Moon gardener without replacing the earned ending or time.

The header flower button opens **Garden memories**. Four discoveries are kept locally under `lumenwake-memories-v1`: First light (any win), Full Bloom (win with three echoes), Moon gardener (three groves in one garden, including strolls), and Night bloom (Nightfall Full Bloom). IDs are validated against the defined collection. Corrupt or blocked storage does not interrupt gameplay; each memory awards once. Fastest-time records retain their existing keys. No historical memories are inferred from older records.

Both native reading dialogs share pause, keyboard shielding, background handling and focus restoration. A previously paused or backgrounded garden remains paused after closing either dialog.

Verification passed all 30 collection routes, 30 Nightfall rescue routes and 20 additional routes that grew every grove and rescued every echo across both modes. The latter earned 20/20 Wild Blooms. Current collection and Nightfall averages were 17 and 27 seconds with perfect world knowledge; these are solvability checks, not human completion-time estimates. Browser checks cover all four memories, persistence across reloads, both dialogs and Wild Bloom on desktop, portrait, landscape and small reduced-motion views.

## New in 1.3

Waking a star weaves curved **light paths** to the remaining sleeping stars. Movement and rendering share the same samples. Within 42 world units of a path, outside the immediate 140-unit star region, drift speed rises from 215 to 285 world units per second. Dashes retain their existing speed and cooldown; paths do not block damage. Every new connection supplies eight sparks once, and connections cannot duplicate. Paths appear on the minimap and use static decorations with reduced motion.

**Pulse** also tethers sparks within 230 world units for 1.35 seconds. They move toward the player, with the existing twelve-spark carrying limit; tether timers freeze while paused.

After victory, **Stay in this garden** opens a peaceful stroll. Shadows leave, movement and abilities stay available, and the expedition timer and records freeze. Collecting during a stroll does not change expedition spark, pulse or dash totals. Remaining echoes can be rescued for company without changing the awarded ending. Leave the garden returns to difficulty selection. Pauses, background handling and release notes keep their existing behavior.

## New in 1.2

Choose **Drift** for the existing gentle expedition or **Nightfall** for nine initial shadows (including rushers), three additional shadows per awakened star, faster pursuit and faster charges. The mode stays fixed during an expedition. After a run, use **Choose another expedition** to switch difficulty without reloading. Fastest times are stored separately on this device; existing `lumenwake-best-v1` records remain Drift records and Nightfall uses `lumenwake-best-nightfall-v1`. Storage failures remain harmless.

Three optional **lost echoes** appear near the sleeping stars and as pale blue minimap dots. Pulse beside one to rescue it. Each rescued echo follows the player and absorbs one shadow hit, then returns to its garden. Spent shields still count as rescues. Waking every star and rescuing every echo earns the **Full Bloom** ending; waking the stars alone still wins.

Results show echoes rescued and the difficulty. The pause screen reminds players of controls. Simulation uses a fixed 60 Hz step, so movement and cooldowns remain consistent across different display rates (long stalls are capped to keep the garden manageable).

The gameplay checks also cover finite light-path trails, current speed and damage, pulse range/capacity/pause, stroll movement and preserved results. They cover rescue counting, one-use shields, restart reset, Full Bloom, difficulty selection, isolated records, blocked storage and movement at 20/30/60/144 fps. The original 30 seeded Drift routes passed, and 30 additional rescue-focused Nightfall routes earned Full Bloom (the current paths and pulse gathering reduced their averages to 18 and 27 seconds respectively). Their perfect world knowledge makes them solvability checks rather than estimates of human play time. Browser checks exercise difficulty selection, companion rescue and both records, alongside the existing controls and release-notes checks.

## What changed in 1.1

- Dash has a 3.2-second cooldown and briefly protects the player.
- Stars grant distinct upgrades: First Light reduces pulse cooldown from five to 3.5 seconds; Tide Keeper increases spark attraction from 90 to 145 world units; Last Bloom reduces dash cooldown to 1.9 seconds. Any star can be restored first.
- Restored stars become protected havens that heal one life after nine uninterrupted seconds. Flowers bloom in each star's color as its garden wakes.
- New rushers telegraph their direction for 0.85 seconds before charging. Weavers approach in a winding path. New shadow types enter as stars awaken.
- Each expedition varies the star positions within their regions. A nearby trail of sparks teaches the first collection and delivery.
- A minimap, numbered markers, individual star progress, gift labels, run timer and contextual hints help navigation.
- Victory and defeat show expedition statistics. Successful expeditions save the fastest time locally on the device; unavailable storage never interrupts play.
- Glows reuse cached textures. Reduced-motion users receive fewer particles and less decorative movement. Touch controls and short landscape layouts are supported.
- Existing Google Analytics events remain intact; dash adds a discrete `lumenwake_dash` event. No movement telemetry is sent.

## Verification

From the Site source root:

```sh
node tests/lumenwake-analytics.test.cjs
node tests/lumenwake-gameplay.test.cjs
node tests/lumenwake-browser.cjs
```

Gameplay checks cover dash invulnerability/cooldowns, pause, haven protection/healing, gifts, charge telegraphs/interruption, victory bloom, records/storage failures and world bounds. A collection-focused autopilot exercises movement, collection, combat and delivery across 30 seeded gardens. With the Singing Paths, it won 30/30, averaging 18 seconds; this uses full world knowledge and is a solvability check, not an estimate of a new player's completion time.

Browser checks use Playwright and Microsoft Edge at desktop, portrait, landscape and small reduced-motion sizes, with real touch input. The browser test locates the installed Playwright runtime on this workspace; adapt that import for another environment. QA instrumentation is served only by the test server, never shipped in the game.

## Release notes

The footer’s **Only human intervention** button opens the dated revision history. `release-notes.js` is the source for both the notes and the displayed version. Each future revision must prepend its changes and real ISO timestamp, increment the version, and preserve prior history; see `AGENTS.md`. Dates display in Europe/Zagreb time. The notes pause active play and restore it on dismissal, unless play was already paused or the window became inactive.


## Expedition stories and world records

The result’s optional **Your expedition story** disclosure lists actual awakening events in order, their expedition times (pauses excluded), health hits and echo shields spent. The report freezes at victory or defeat; afterglow exploration cannot change it. A restart or world selection clears it. The report is held in memory, not saved as a route or movement log.

Ordinary worlds keep best times under `lumenwake-garden-best-g1-<G1 code>-<mode>`. Dated daily worlds reuse `lumenwake-daily-g1-<day>-<mode>`. Previous overall records stay under their existing keys. A win updates only a faster positive finite best; a loss, restart, stroll or forgotten pocket reference never overwrites it. Bests count any three-star victory, regardless of optional echoes and groves. Comparison times display tenths; an improvement under 0.1s is described explicitly.

Best times appear in the introduction and kept-world cards. A cache retains them for the current visit if device storage fails, with honest visit-only result wording. Older overall records cannot be attributed to a code and are not fabricated into world records. These functional guarantees do not establish optimal tuning or player enjoyment.


## New in 1.10

Touch steering uses a floating thumbpad anchored at the gesture's initial screen coordinates. A radial 8px dead zone is stationary, then speed scales linearly to full strength at 56px. Maximum drift/current speeds and dash behavior remain the same. The pad is visible only while the owning touch pointer is active; it does not add decorative animation or consume random numbers. Keyboard input takes precedence. Mouse and pen keep world-point aiming, including the existing mouse dash direction.

The first accepted pointer on the canvas owns steering until its release/cancellation. Other pointer starts, moves, releases and lost-capture events cannot replace that gesture. Native ability buttons can use a second finger while the steering pointer remains captured by the canvas. Touch dashes use the drag direction, including immediately after reversing it; within the dead zone they use the existing velocity/default-up fallback.

Pause, reading dialogs, backgrounding, resize, restart, victory/defeat, world selection and stroll entry clear steering and release capture safely. Resuming needs a new gesture. Nothing is stored or sent about the finger's movement. G1 initialization, previous records, pocket references and frozen expedition reports are preserved.


Pulse and Dash respond to touch pointer presses, including secondary fingers. A per-button guard suppresses a subsequent pointer compatibility click even if its cooldown has expired by release. Mouse pointer presses reset that guard; native keyboard clicks (`detail === 0`) remain available. Existing cooldown/state checks still apply. Browser multi-touch checks explicitly release the second contact and confirm that the owning finger remains captured; direct pointer-event checks cover unrelated releases, cancellation and lost capture.


Verification: input checks passed stationary touch, dead-zone/proportional/full drift, camera-independent direction, dash reversal, unrelated pointer events, cancellation/lost capture, pause/dialog/blur/resize/reset cleanup and retained mouse/pen/keyboard control. Ability checks passed direct touch presses, later-click suppression after cooldown expiry, and native keyboard/mouse activation. Browser checks passed at 1440×1000, 390×844, 844×390 and 360×640 (reduced motion), including real multi-touch ability presses on both phone sizes, OS-style cancellation and pause capture release. All 80 collection/rescue/grove routes completed, six sampled G1 layouts matched v1.9, and all twelve earlier diary entries remained unchanged. These checks do not establish optimal touch tuning or player enjoyment.


## 1.10.1 / separate start measurement

Recorded 2026-10-05 12:07:49 CEST (UTC+02:00, Europe/Zagreb) before implementation. Problem: the user wants collection arrivals and game-specific launches, while the original Lumenwake reports many actions. Approach: share an isolated analytics helper across /ai-games/, send only afterlight_game_start or lumenwake_game_start from a successful new run, and use a canonical landing page_view. Expected benefit: useful separate counts without detailed play telemetry. Tradeoffs: retries count as starts; blocked analytics can reduce recorded counts; GA maintains its own client / session metadata. Local checks establish behavior, not reporting in the GA account. Gameplay and records are preserved.


## Collection analytics / 1.10.1

Install this edition with the parent /ai-games/ analytics files from the
collection ZIP. The game uses the existing site's G-F8SHB9S9BF property
only when a successful new run starts on a production HTTPS host. Its
event is lumenwake_game_start; retries count as starts. Opening the game, notes,
pause/resume and gameplay actions do not count. Local / offline play is
unmeasured; a blocked tracker never prevents play. Gameplay rules and
records are preserved. The collection TESTING.md records actual checks.

## Documentation access

The initial HTML contains the closed release diary. Markdown and JSON companions are generated from the same records under `/reference/ai-games/lumenwake/`. Individual entries have `#release-vVERSION` anchors (dots become hyphens; repeated historical versions receive a numeric suffix). Opening a linked entry uses the existing reading dialog and pause/focus behavior. Gameplay and G1 gardens are unchanged.
