Files
Project-M/Docs/Vault/06_Roadmap/Roadmap_Lantern_Slice.md
T

271 lines
26 KiB
Markdown
Raw 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.
---
title: LANTERN Vertical Slice — high-level implementation roadmap
date: 2026-07-13
tags: [roadmap, lantern, vertical-slice, direction, art-pipeline]
permalink: gamevault/06-roadmap/roadmap-lantern-slice
---
# LANTERN Vertical Slice — Implementation Roadmap (high level)
> Implements the slice tier of [[Identity_Lantern]] (final draft, review-hardened). **High-level by design** — a second pass will deepen each phase technically (per-phase design reviews, DOTS/netcode verification) as it comes up. No time estimates (operator directive). Supersedes [[Iteration_2026-07_CoopHades]] as the operative direction once the adoption DR lands.
>
> **The slice's falsifiable test (the only gate that matters):** *does pinning a pocket feel like winning something, and does a stranded suit feel worth a second descent?*
>
> **Two tracks run in parallel:** the **system phases (07)** and **Workstream A (art, modeling & visual direction)** — a first-class track with its own gates, because this direction lives or dies on custom creatures/characters made by one person. Each system phase names its asset needs; Workstream A names how they get made.
## Standing constraints
- Stack unchanged: Unity DOTS + Netcode for Entities, server-authoritative, input-only clients, client prediction, 24 co-op ([[Pillars]] #4 holds).
- Existing code is quarry, not foundation: strip/reuse freely (combat feel layer, ability plumbing, hub/run lifecycle, save system are all candidate salvage), but no design decision bends to preserve code.
- Netcode-heavy slices get an adversarial design review BEFORE coding (the standing project ritual). Flagged ★ per phase.
- Every phase ends with a play-gate, not a test count.
- **Placeholder-first, art-pass-second:** every system phase may ship its gate on kitbash/greybox placeholders; Workstream A replaces them on its own cadence. Systems never wait on art; art never blocks a gate.
## Phase 0 — Adoption & groundwork
1. **Adoption DR** — LANTERN supersedes the Awakening Engine identity + the Co-op Hades iteration; old fiction/lexicon archived, not deleted. Update [[Pillars]] pointers; CLAUDE.md game-state note.
2. **Strip/mothball pass** — inventory current systems into keep / rework / mothball against the slice list (combat feel layer + telegraphs: keep; boon pipeline: rework into mutations; regions/relevancy, save system, hub lifecycle: rework; sieges/economy leftovers: mothball).
3. **World-model design spike ★review-first** — the pocket-graph + seed-pinning contract: pocket generation as a pure function of (seed, pocket-id); pinning = persist seed + structure deltas; pocket streaming/replication as runtime ghosts; muster/Bell transit contract. The slice's hardest netcode problem — design before any world code.
4. **Art direction lock = Workstream A0** (below) — runs inside this phase; its style-proof gate is part of this phase's exit.
**Gate:** DR merged; world-model design review passed; **A0 style-proof scene approved**.
> **Phase 0 status (updated 2026-07-14):** ✅ 0.1 adoption ([[DR-048_Lantern_Adoption_Full_Pivot]]) · ✅ 0.2 strip/
> mothball ([[Lantern_Strip_Mothball_Inventory]]) · ✅ 0.3 world-model **design review passed** →
> [[World_Model_Build_Spec]] + [[DR-049_Lantern_World_Model_Design]] · ◑ 0.4 A0 — material spec + recipes written
> ([[Art_Direction_Lantern]] + [[Lantern_Art_Pipeline_Recipes]]) **AND the in-engine style-proof scene is BUILT**
> (`Assets/Scenes/ArtStaging.unity`): the **prop + creature + suit triad** (crate · Wisp-flora · Drowner · Bathynaut)
> baked in under murk + "light is territory" pool lighting + caustics/marine-snow/seabed, judged full-size / 200px /
> grayscale from the game camera. **Remaining for the gate: operator sign-off** (+ the 3 master ShaderGraphs, still
> stand-ins). Driven by the new **`/art-dev`** skill + the hybrid nudge-and-bake workflow. Phase-1 design is
> ready ([[Lantern_Phase1_Combat_Gym_Build_Spec]]); operator decisions parked in [[Lantern_Operator_Questions]].
## Phase 1 — Combat core: two frames that feel like Shape of Dreams
The primary verb first. No world, no lanterns — a gym.
1. **Bathynaut** (anchor-and-crash melee) + **Harpooner** (line-and-iron skillshots incl. reel/drag) as suit-frames — chassis verbs, movement feel, dash.
2. **Skillshot kit plumbing:** 4 socket slots per frame; cooldown/telegraph/aim grammar to the SoD bar (manual aim, real windups, readable hitboxes).
3. **First 45 Sparks** as socketables (decoy-wisp, hook/pull, vortex, blink, one zone) — enough to prove kit variety.
4. **Light-as-information prototype ★review-first:** per-player lamp radius drives netcode relevancy (entities outside your light aren't replicated); dim/bright as the quiet/blind trade.
5. Underwater feel pass: buoyant knockbacks, slow debris, murk fog, hydrophone audio sketch.
**Asset needs:** 2 suit-frames (first-pass: humanoid-pipeline kitbash), Spark VFX set (procedural + palette), gym props. **Pipeline dependency: A1 runs alongside this phase.**
**Gate:** the gym is fun with two players for 15 minutes on kit alone; relevancy-light verified server-side (gamma test: nothing to see).
> **Phase 1 status (2026-07-15):** ✅ Group A (4-socket kit) · ✅ Group B (5 Sparks: decoy / hook-reel / vortex /
> blink / light-zone; Aoe/Hitscan dispatch; `ReelSystem` / `ZonePulseSystem` / decoy aggro; 3 effect ghosts + defs;
> on-demand enemy-spawn tooling) · ✅ the **full remainder, code-complete** — **step 5** two-frame identity (FrameId
> signal + per-frame gym loadouts), **step 6** manual-aim windups, **step 8 ★** light-as-territory relevancy
> prototype, + the dedicated **`Gym.unity`** (re-based on DevSandbox: camera + DebugOverlay + world → streams the
> minimal `GymSub`). **500 EditMode green.** ◻ **Remaining = operator/L3 + focused passes:** the gym Play (feel +
> the A1 animated-pipeline confirmation + light-relevancy gamma test + induced-rollback), **step 7 underwater feel**
> tuning (substrate exists; = the operator's future visual pass), the legacy `AbilityRef` wholesale removal +
> CharacterId→Bathynaut/Harpooner rename (risky focused refactor), and the **★ adversarial netcode review** of the
> relevancy + reel slices. See [[2026-07-15_Lantern_Phase1_GroupB_5Sparks_Systems]].
## Phase 2 — The dark & the pocket-graph
1. **Twilight shelf as a pocket-graph:** 35 generated dark pockets per descent on a graph; seed-fresh re-knot per descent; pocket transitions.
2. **Descent lifecycle:** muster at the Lamp → Bell down → pockets → Bell recall or lit-road walk home; ~3040 min hard session cap.
3. **Enemy roster v1:** Drowners (melee swarm), Grindylow packs (leapers), Wreckers (gloam-casters with counterfeit beacons + scan counter), Wisp-Choir as first named encounter.
4. **Brighter-is-louder:** party Loudness sum drives spawn/aggro pressure; per-Wick Loudness pips on HUD.
5. **Harvest:** Lumen nodes, organ drops, carried-vs-banked cargo distinction.
**Asset needs:** 4 creatures (Drowner, Grindylow, Wrecker, Wisp-Choir — the **A2 creature-factory proving ground**), Lumen node family, pocket dressing set (rocks, wrecks, glow-flora), Bell.
**Gate:** two consecutive descents feel different (re-knot working); the Wrecker fake-beacon moment lands on a first-time player.
## Phase 3 — The tide-line: lanterns, pinning, permanence
1. **Plantable, hand-fed waypoint-lanterns:** planting pins the pocket (seed + deltas persisted); lit pockets persist across descents and sessions; muster moves to the deepest lit waypoint.
2. **Session-only burn:** fuel drains only while a session runs; guttering telegraphs long and loud before the dark un-pins a pocket.
3. **Banked light:** deposit at any lit lantern = home; the Lamp meter brightens the station visibly.
4. **Building v1 (minimal):** a small buildable set inside lit pockets — enough to make a pinned pocket feel *owned* (the slice test hinges here).
**Asset needs:** the waypoint-lantern family (unlit/lit/guttering states — a hero prop; light states do the acting), small buildable set, fuel/feeding VFX.
**Gate:***pinning a pocket feels like winning something* — playtest-judged, the first half of the slice test.
## Phase 4 — Sparks, mutations & the homecoming economy
1. **Culture library:** first organ home = permanently cultured; grafts regrow cheaply from culture (death-proof knowledge floor).
2. **Wild mutations:** Sparks drink Gloam; 2 paced thresholds per descent offering 23 warps, at pocket-clear beats only; mutations evaporate at homecoming.
3. **Tallow fixing:** 1 fix slot per Spark; the **scripted first-evaporation beat** (Keeper names the rule, gifts one Tallow).
4. **Raw-socketing:** wield a fresh organ wild (over-tuned, temporary) vs. bag it for culturing.
5. Fill the Spark catalog to 810.
**Asset needs:** organ/pickup mesh family (blobby, emissive — early Blender wins), graft-socket UI, mutation VFX variants (palette/param variants on Spark VFX, not new effects).
**Gate:** two consecutive descents produce visibly different builds from the same kit; the evaporation beat reads as a gift, not a theft.
## Phase 5 — Death, recovery & the solo valve
1. **The split:** flame returns (rack-spare respawn, cheap regrow); cargo + fixed mutations + raw organs strand with the suit at its death site.
2. **Recovery:** stranded suits persist across descents (deterministic server relocation, never RNG); ally body-carry; carried suits stay loud; one-suit debt cap; party wipe drifts suits one pocket shallower.
3. **Guttering + flame-share revive** (giver pays flame).
4. **Selkie tariff** (menu-level for the slice).
5. **Solo Tender dive-companion:** drags guttering suits toward light, hauls cargo, holds a lantern's feed.
**Asset needs:** stranded-suit prop states (dark/claimed/carried), the Tender companion (small, characterful — a hero-adjacent model worth real time), carry/revive VFX.
**Gate:***a stranded suit feels worth a second descent* — the second half of the slice test; solo death is a story, not a rage-quit.
## Phase 6 — The finale: shelf-boss + the scripted tide
1. **Shelf-boss** (Twilight's warden): a real multi-phase skillshot fight; drops the slice's signature Spark + a schematic beat.
2. **One scripted Serpent-tide as the slice climax:** forecast by the Siren, targeting the party's planted lantern — defend it or lose the pin.
3. Difficulty/co-op scaling pass (14 players; Loudness carries most of it).
**Asset needs:** the shelf-boss (**the slice's hero creature** — silhouette-first, budgeted real modeling time), tide VFX language (the dark moving as weather).
**Gate:** the tide finale generates the clip — a party defending their own light and telling the story afterward.
## Phase 7 — The station & the voices
Runs parallel with 46 where possible.
1. **The Last Lantern hub:** Lamp (meter + radius), rack, graft-bench, culture library, Bell — each a physical place.
2. **The Keeper** (text-first, subtitle lines): tutorializes the loop, the split, the evaporation gift; evasive-warm register per the tone bible.
3. **The Siren:** descent forecast at the Bell + **hydrophone bleed mid-descent** + the tide forecast.
4. **Lamp-morse:** ping wheel, revive plea, greeting — procedural chirp audio.
5. **Tone bible** (one page, register bounds per character) before any bark generation.
**Asset needs:** station set (Mother-Lamp as the hero set-piece whose brightness IS the campaign readout, Bell, rack, benches), the Siren's bell-tank vignette.
**Gate:** a new player completes first descent → death → recovery → pin with no external explanation; the hub reads as a home, not a menu.
---
# Workstream A — Art, Modeling & Visual Direction (first-class track)
> One developer, learning Blender (blendermcp + tooling), shipping custom models, characters, and enemies. The workstream's product is not just assets — it is a **repeatable factory** such that creature N+1 is a routine sitting, not a research project. Gates are real; the deeper technical pass will spec each stage.
## A0 — Art direction lock (runs inside Phase 0)
1. **Style bible (one page, binding):** stylized low-poly, RoR2-lineage. Silhouette-first; faceted geometry; flat/near-flat shading; mood carried by dynamic light in murk. **Poly budgets:** props ≤ ~800 tris · creatures ≤ ~3k · hero/boss/suits ≤ ~6k. The [[Identity_Lantern#Art, audio & the readability law|readability law]] (value-first, flicker-cadence, 200px rule) applies to every asset from day one.
2. **The material decision (the solo-dev keystone): no per-asset texturing, ever.** One shared **palette/gradient atlas** (Imphenzia-style: a single small texture of color bands; UVs are *placed*, not unwrapped) + vertex-color accents, under **three master shaders**: `Lit-Palette` (statics), `Emissive-Gloam` (parameterized warm/cold/lure emissive — one shader is the whole palette rule), `Skinned-Palette` (deformation-aware for creatures/suits). Every asset in the game shares ~3 materials: coherence, batching, and zero texture-painting skill required.
3. **Reference board:** RoR2 (shape language), Dredge (water mood), Hollow Knight (value control in dark), Below (the cautionary legibility case).
4. **Style-proof scene (the gate):** one prop + one creature + one suit, in-engine, under murk + dynamic lights, on the capture grade — judged full-size AND at 200 px AND in grayscale. **Locked before any mass production.**
> **A0 progress (2026-07-14) — style-proof scene BUILT, awaiting operator sign-off.** Palette atlas + 3 shared
> materials shipped earlier; this session added the full triad + the in-engine staging scene:
> - **Assets (Blender, `ArtSource/Blender/`):** `Prop_CargoCrate` (92 tris, statics/palette proof) · `Prop_GlowFlora`
> (380, cold-teal emissive clutter) · `Creature_WispMote` (110, Drifter gloam-wisp) · `Creature_Drowner` (2.7k,
> Synty-crew Strider kitbash — gloam-tinted, hunched, glowing eyes) · `Suit_Bathynaut_Kitbash` (~9k ⚠ over the ≤6k
> hero budget — decimate + pick body-or-armour for game-ready). Palette-atlas single-material + emissive throughout;
> Synty kitbashes (licensed). Suit/creatures are **posed silhouette concepts**, not yet rig-bound for animation.
> - **In-engine (`Assets/Scenes/ArtStaging.unity`):** prop+creature+suit baked in (glTFast posed statics) under the
> **A0 conditions** — undulating seabed (no platform edge), caustics cookie, marine-snow particles, teal depth fog,
> ACES+bloom+vignette capture grade, and the **"light is territory" pool lighting** (warm beacon = ours, cold
> bioluminescent flora pools = the deep, deep dark between) + a Play-mode ambiance animator (`StagingAmbiance`).
> Passes the three-way judge: full-size, 200px, and **grayscale** (warm/cold separated by *value + flicker-cadence*,
> not hue alone — the colorblind-safe read). ⚠ **Vertical god-rays don't read down a top-down camera** — ground
> pools do (recorded in the [[Lantern_Art_Pipeline_Recipes|recipes]] / `/art-dev` cookbook).
> - **Master shaders — all 3 now present:** `Lit-Palette` (the `Lit URP` graph) + `Skinned-Palette` (`AnimatedLitShader`,
> Rukhanka-deformation) already existed; **`Emissive-Gloam` authored this pass** as a hand-written URP shader
> (`ProjectM/EmissiveGloam`, `Assets/_Project/Shaders/`) with the **flicker-cadence as a material param** (`_FlickerAmount`
> 0=steady/true, >0=gutter/false) — in-shader, no script. (ShaderGraph can't be authored via the MCP; HLSL is the better
> home for the flicker anyway.) The staging warm/cold read now separates by **value + flicker-cadence**, not hue alone
> (passes the grayscale/colorblind check).
> **A0 update (2026-07-21) — value/composition rework pass.** A critical re-read of the staging scene found
> the mood + material system passing but the value hierarchy INVERTED (the suit's albedo/lamp out-valued the
> beacon — the opposite of "light is territory") and the composition weak (Drowner facing away + dying at
> 200px; crate occluded; T-pose). Fixed headless: global fill lights cut (KeyWarm 1.25→0.15, Caustics 32→9,
> GloamFill 0.5→0.22), `WarmPool` reworked into a downward warm SPOT = a defined ground-territory disc, suit
> lamp emissive tamed + bloom threshold raised (killed a blown chest streak), Drowner faced-to-camera + accents
> boosted, triad recomposed (crate in-pool / Drowner at the lit edge / suit center). Grayscale now shows the
> beacon as the value winner + a mid-value warm territory — the three-way mechanical judge PASSES.
> **Still open for sign-off: the suit POSE (a Blender rig+pose sitting — the body is an unrigged Synty mesh +
> 37 welded attachments; aligns with the A3 Wick-sculpt work) + the eyes-on-only criteria (flicker-cadence,
> the "this game and no other game" call).** See [[2026-07-21_ArtStaging_A0_Value_Pass_J]].
## A1 — Pipeline proof (runs alongside Phase 1)
1. **Two written recipes, checklist-grade** (this project runs on distilled gotchas; the art pipeline gets the same treatment):
- **Statics:** Blender → export (units/scale settings) → collider policy → entity baking → palette material. Target: minutes per prop.
- **Skinned:** Blender rig → per-action clips (Key All Bones, bake to pose) → FBX → animation-system ingest → `Skinned-Palette` material → prefab. Every step scripted or checklisted via blendermcp where possible.
2. **The three rig families (the amortization decision):** every slice creature maps onto one shared armature family, so *clips are made per family, not per creature*:
- **Drifter** — spine-chain swimmer (Wisp-Choir motes, lure-fish, later serpents/rays): swim-idle, dart, attack, death-sink.
- **Crawler** — legged/scuttling floor unit (Grindylow, later kappa-kin/Tenders): skitter, leap, attack, death.
- **Strider** — biped-ish (Drowner, Wrecker, and the suit-frames themselves): walk, windup, attack, death.
- Clip budget: **45 clips per family** (idle/move/windup/attack/death) + per-creature attack accents only where identity demands.
3. **Suit-frames, pragmatic path:** first pass = kitbash on the existing humanoid pipeline (helmet/tank/plate swaps over a proven rig); custom Wick silhouette sculpt is an A3 upgrade, not a Phase-1 blocker.
4. **Procedural assists:** geometry nodes for glow-gardens/coral/tube-worm sets (parametric families, not hand-modeled instances); blendermcp scripts for the repetitive export/import steps.
**Gate:** one creature goes cube → rigged → animated → fighting in-game **in a single documented sitting — twice** (repeatability is the gate, not beauty).
> **A1 progress (2026-07-14) — partial (ran early during A0).** The **statics recipe is validated end-to-end in-engine**
> (Blender → glb → glTFast import → shared `M_Lit_Palette` → renders correct in URP at the game angle; the crate + flora
> are baked into ArtStaging). Both recipes are written checklist-grade ([[Lantern_Art_Pipeline_Recipes]]) + the `/art-dev`
> cookbook. **Skinned recipe — now proven for a LANTERN creature:** `EnemyRigTools.BuildDrowner` (new menu, extends the
> DR-023 table-driven tool) produces **`EnemyDrowner.prefab`** — a game-ready ownerless-interpolated **skinned** enemy
> (SciFiSpace Crew_Male body, gloam `M_Enemy_Drowner_Animated` on the `Skinned-Palette`/`AnimatedLitShader`, `AC_EnemyTopDown`
> + `RigDefinitionAuthoring`), structurally identical to the shipping werewolf/charger → animates in-game via the same
> EG/Rukhanka path (renders only in the baked ECS world, not a plain scene). **Still open:** the authoritative **in-game
> animated run** (wire into `WaveDirector.EnemyPrefabs[]` + a Server/Client play-run — a gameplay-roster change), the
> **custom kit** re-attach (glowing eyes/kelp as bone-parented children), and the **Bathynaut suit + 2nd creature** — so
> the "cube→rigged→animated→fighting, twice" gate is close but not signed off. ✅ Rig-type **verified HUMANOID**
> (`Characters.fbx` `animationType = Human` (enum 3); `CharactersAvatar.isHuman = true`) — CLAUDE.md's "HUMANOID" note is
> correct; the earlier "Generic" flag was an enum misread (**3 = Human, not Generic**). Still: reuse the rigged Synty
> prefab + `CharactersAvatar` via the tool; don't reimport the FBX (a rig-type flip would break the clip binding).
> Reusable gotchas banked: Blender-5.1 Synty-FBX import workaround, bounds-normalize scattered Synty rocks, posed-static
> hero bake (apply-armature + visual-transform), the Unity URP render-harness (layer sign-bit, `SubmitRenderRequest`),
> and the `EnemyRigTools.BuildDrowner` path + its EG-only-render caveat.
>
> **Enemy-test GYM (operator direction 2026-07-14) — the home for the animated validation + tuning.** Rather than hack
> the shared `Gameplay.unity` wave roster for a one-off animated check, build a **semi-permanent gym scene** (this is
> Phase 1's "no world — a gym") with **tooling to spawn a chosen enemy on demand** (Drowner/Grindylow/… for
> test+tune). It survives the anticipated **enemy-system rework** (the gym is test scaffolding, independent of enemy
> design). The 3 skinned prefabs (`EnemyDrowner` w/ eyes, `EnemyGrindylow`, `SuitFrame_Bathynaut`) are built + ready to
> drop in. This is a focused `/dots-dev` build (netcode boot + a baked enemy-roster subscene + a spawn system/debug UI)
> — the in-game **animated confirmation of the skinned pipeline lands here**, not via a roster hack.
## A2 — The creature factory (runs alongside Phases 26)
1. **"CreatureKit" workflow/tooling:** one editor tool or hard checklist that takes a Blender export and yields a play-ready enemy — prefab with rig + ghost/network authoring + colliders + a tuning-table entry + spawn-table and bestiary hooks. **The measure: adding enemy N+1 touches zero undocumented steps.**
2. **Variant policy (cheapest content first):** palette-shift / gloam-tint / scale / part-swap variants of existing meshes BEFORE any new mesh. One Drowner mesh should yield 3 visual tiers; the Emissive-Gloam shader's parameters (hue, flicker-cadence, intensity) are a free variant axis that is *also* gameplay information.
3. **VFX-first identity rule:** emissive accents + a dynamic light + silhouette + animation carry a creature's identity in this game's darkness; mesh detail is the last 20%. Budget accordingly — a readable blob with a great light beats a detailed model nobody can see.
4. **Delivery order (matched to system phases):** Drowner (Strider, simplest) → Grindylow (Crawler) → Wrecker (Strider variant + beacon prop) → Wisp-Choir (Drifter motes + VFX — barely a "model" at all, a good early win) → organs/pickups (Phase 4) → Tender companion (Phase 5, characterful) → **shelf-boss (Phase 6 — the hero build: silhouette explorations first, kitbash from family parts where possible, real time budgeted)**.
5. **Throughput rules (solo sanity):** timebox per asset class (a prop is a morning, a creature is days not weeks, the boss is the exception); the done-bar is *"reads at gameplay zoom, under murk, in motion"* — never render-portfolio quality; when stuck, ship the placeholder and log the upgrade.
**Gate (mid-slice checkpoint at Phase 2's gate):** all four Phase-2 creatures in-game through the CreatureKit path; a written retro on the factory's friction points feeds the deeper technical pass.
## A3 — Hero assets & the visual polish pass (runs alongside Phases 67)
1. **The hero set:** the Mother-Lamp (the station's centerpiece whose brightness is the campaign readout — the single most important model in the slice), the waypoint-lantern family (unlit/lit/guttering — light states act, the mesh holds still), the shelf-boss, the custom Wick silhouette upgrade (replacing the A1 kitbash), the Bell.
2. **The world dressing pass:** geometry-node garden/coral/wreck families dressed through the pocket generator; station interior set.
3. **Capture-grade validation:** the readability law audited on real gameplay footage — compressed-bitrate test (does Midnight-adjacent murk survive streaming?), grayscale test, colorblind-sim pass on the warm/cold/lure triad.
4. **Screenshot discipline check:** the slice's store-facing shots pass the 200px + warm-focal-light + legible-silhouette rule.
**Gate:** the slice's finale clip (Phase 6's gate footage) looks like *this game and no other game* — style bible held under real play, not staged shots.
---
## Cross-cutting workstreams (woven through all phases)
- **Audio:** hydrophone bed, lamp-morse chirps, Bell toll, Siren verses (placeholder → authored), silence-with-texture.
- **Dev tooling:** pocket-graph visualizer, seed-pin inspector, Loudness/threat readout, descent-state overlay, screenshot rig on the capture grade, CreatureKit (owned by A2 but serves everyone).
- **Validation culture (unchanged):** EditMode tests for math/economy invariants (pinning determinism, mutation thresholds, Loudness sums, strand/regrow rules); Play-mode server==client checks for every replicated surface; adversarial design reviews for ★ phases; every gate is a playtest.
## Sequence at a glance
| System track | 0 (adoption + world spike ★) | 1 (combat ★) | 2 (dark) | 3 (tide-line) | 4 (mutations) | 5 (death) | 6 (finale) | 7 (hub, parallel) |
|---|---|---|---|---|---|---|---|---|
| **Art track** | A0 style lock | A1 pipeline proof | A2 factory (4 creatures) | A2 (lantern family) | A2 (organs) | A2 (Tender) | A3 (boss + hero set) | A3 (station + polish) |
The deeper technical pass (next sessions) takes each phase in turn: context7-verified API grounding, the ★ design reviews, salvage mapping against the existing codebase, per-phase build specs — and for Workstream A, the concrete recipe documents (export settings, rig conventions, CreatureKit spec) validated against the project's existing animation-pipeline knowledge.
## Related
- [[Identity_Lantern]] — the design this implements (scope ladder = this roadmap's contract; readability law = A-track law)
- **Phase 0 artifacts:** [[DR-048_Lantern_Adoption_Full_Pivot]] · [[Lantern_Strip_Mothball_Inventory]] · [[World_Model_Build_Spec]] + [[DR-049_Lantern_World_Model_Design]] (+ [[Lantern_World_Model_Spike]] / [[Lantern_World_Model_Design_Proposal]]) · [[Art_Direction_Lantern]] + [[Lantern_Art_Pipeline_Recipes]]
- **Phase design specs (all phases covered):** [[Phase1_Combat_Gym_Build_Spec]] (review-hardened, [[DR-050_Lantern_Phase1_Combat_Design]]) · [[Lantern_Phase4_Mutations_Design]] · [[Lantern_Phase5_Death_Recovery_Design]] · [[Lantern_Phase6_7_Finale_Station_Design]] · [[Lantern_Currency_ReMean]] · [[Lantern_Tone_Bible]] (Phase 7)
- **Running:** [[Lantern_Operator_Questions]] — decisions parked for the operator
- [[Theme_Direction_Candidates]] — research underneath the direction
- [[Synty_Asset_Inventory]] — placeholder quarry during the transition
- [[Iteration_2026-07_CoopHades]] — superseded on adoption
- [[Pillars]] — unchanged constraints