Docs: redirect to co-op roguelite — Expedition spine + classes + persistent meta

Playtest of the single-arena slice (Scratch Notes 6152026) found it stale fast.
Answer the post-END-2 Decision Gate as continue/expand: re-scope off the fixed
June-30 demo to a co-op roguelite-ARPG — base = persistent buildable hub (never
resets), the procedural Expedition region = the required combat spine, two classes
(Warrior/Ranger), persistent meta (SaveData v6 later). Mission-as-Sortie model:
fulfils locked pillar #4, preserves the never-a-run-reset pillar; reverses DR-031's
expedition pause. Backed by an 8-agent design+feasibility pass (feasibility GREEN:
server-spawns-ghosts removes seed replication). Slice doc archived/superseded.

See DR-037.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-17 12:47:54 -07:00
parent 78ffa106b6
commit 5292940f9d
6 changed files with 115 additions and 9 deletions
+1 -1
View File
@@ -114,7 +114,7 @@ So every fight is fought *with* what the factory made and *for* the base the fac
- The **narrative payoff** — the goal meter currently fills (`Target=10`) with no authored ending; staged **memory beats tied to charge milestones** + the Echo's voice lines are net-new *content/writing* (playable as subtitles first), tracked for a later narrative milestone — NOT a systems change. - The **narrative payoff** — the goal meter currently fills (`Target=10`) with no authored ending; staged **memory beats tied to charge milestones** + the Echo's voice lines are net-new *content/writing* (playable as subtitles first), tracked for a later narrative milestone — NOT a systems change.
- A literal **corruption/risk meter**, **memory-gated abilities**, or a real **ending payoff** are net-new design for a future milestone if ever pursued. - A literal **corruption/risk meter**, **memory-gated abilities**, or a real **ending payoff** are net-new design for a future milestone if ever pursued.
- The recharging pod stays a **persistent anchor** (death = respawn), never a roguelike run-reset (locked persistent-base pillar / [[DR-013_M6_Aether_Cycle_Region_Split]]). - The recharging pod stays a **persistent anchor** (death = respawn), never a roguelike run-reset (locked persistent-base pillar / [[DR-013_M6_Aether_Cycle_Region_Split]]). **Reinforced 2026-06-17 ([[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]):** the **Sortie into the Blightfield is now the primary combat venue** (Mission-as-Sortie — the Engine/base never resets; only the Blight re-grows and run-buffs expire). No fiction change — this is exactly the [Aether Cycle](#the-aether-cycle-in-fiction)'s *Sortie / Siege / Forge*. The **two operator-class frames** (a melee-channelling **Warrior** + a ranged **Ranger**) are Sleeper archetypes; their run meta-buffs are *more Aether channelled* (the existing `StatModifier` fold) — and persistent meta = the pod restoring durable capability between sorties.
## Related ## Related
+2 -1
View File
@@ -25,9 +25,10 @@ permalink: gamevault/01-vision/pillars
- **Tech stack:** Unity DOTS (Entities) + Netcode for Entities — server-authoritative, input-only clients, client prediction. Established [[2026-05-29_Project_Setup]]. - **Tech stack:** Unity DOTS (Entities) + Netcode for Entities — server-authoritative, input-only clients, client prediction. Established [[2026-05-29_Project_Setup]].
- **Control (locked 2026-05-30):** WASD movement, controller-first, **directional / twin-stick aim** with soft auto-target in-arc. [[2026-05-30_M1_Player_Slice]] - **Control (locked 2026-05-30):** WASD movement, controller-first, **directional / twin-stick aim** with soft auto-target in-arc. [[2026-05-30_M1_Player_Slice]]
- **Multiplayer (locked):** small co-op **24, client-hosted listen-server** (BinaryWorlds + in-proc IPC; not the experimental SingleWorld host mode), PvE. - **Multiplayer (locked):** small co-op **24, client-hosted listen-server** (BinaryWorlds + in-proc IPC; not the experimental SingleWorld host mode), PvE.
- **World (locked):** persistent buildable **home base + instanced/procedural expeditions**. - **World (locked):** persistent buildable **home base + instanced/procedural expeditions**. **Sharpened 2026-06-17 ([[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]):** the procedural **Expedition region is the required combat SPINE** (where the bulk of the fight happens); the **base is the persistent HUB that never resets** ("Mission-as-Sortie": Deep Rock Galactic / Cult of the Lamb). A "run" is a **re-seeded Expedition region in the SAME world**, not a new world or a base reset.
- **Automation (locked):** **progression accelerator** — self-running production chains; data model designed to grow toward full logistics. - **Automation (locked):** **progression accelerator** — self-running production chains; data model designed to grow toward full logistics.
- **Combat-primary + depth-before-breadth (locked 2026-06-08):** combat is the primary braided verb; **no new system until one braided loop is genuinely fun**, and every milestone ends with a play/fun-gate (not just green tests). [[DR-028_Combat_Primary_Verb_Depth_First]] · roadmap [[Path_to_Fun]]. - **Combat-primary + depth-before-breadth (locked 2026-06-08):** combat is the primary braided verb; **no new system until one braided loop is genuinely fun**, and every milestone ends with a play/fun-gate (not just green tests). [[DR-028_Combat_Primary_Verb_Depth_First]] · roadmap [[Path_to_Fun]].
- **Classes + persistent meta (locked 2026-06-17, [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]):** **two classes****Warrior** (melee anchor) + **Ranger** (ranged, manually aimed — *not* auto-fire, which would break skill-expression). Class identity = the **primary-attack archetype**; run-acquired **meta-buffs ride the existing `StatModifier`/`TimedModifier` pipeline**. A **persistent meta-progression layer** (SaveData v6) funds permanent growth at the hub; run combat-buffs are run-scoped. **Reverses [[DR-031_Base_Mining_Loop_Cohesion]]'s expedition pause** (a real playtest — [[Scratch Notes 6152026]] — showed the single arena goes stale).
## Related ## Related
+12 -3
View File
@@ -13,15 +13,24 @@ Open / candidate work only. **Done items live in [[Milestones]] + their DR / ses
kept to the forward-looking pool — promote an item to [[Milestones|a milestone]] when committed, then drop it here). kept to the forward-looking pool — promote an item to [[Milestones|a milestone]] when committed, then drop it here).
Last decluttered 2026-06-08 (removed all shipped `[x]` items; their context is preserved in the linked records). Last decluttered 2026-06-08 (removed all shipped `[x]` items; their context is preserved in the linked records).
## NEXT — Awakening Engine Last Stand (End-of-Month Slice) ★ ## NEXT — Co-op Roguelite Redirect (Procedural Expedition Spine + Two Classes + Persistent Meta) ★
**The active operational target for June 1330 is the [[End_Of_Month_Game_Jam_Slice]]** — a compact top-down ARPG / survival base-defense demo (mine Ore → build Turret/Wall/Fabricator → Ore→Charge→turret-shots → survive escalating Husk waves → hold the losable Engine Core through a **final siege****win or lose in a 58 min run**, in **one compact arena**). This **answers the Path A Decision Gate early as *ship the minimum*** ([[DR-035_End_Of_Month_Slice_Adoption]]); [[Path_to_Fun]] stays the long-term north-star and **Path B stays provisional** until a ship-vs-continue note is logged *after* June 30. **The operative target as of 2026-06-17 is [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]].** An operator playtest ([[Scratch Notes 6152026]]) found the single-arena slice **stale fast**; the operator answered the post-END-2 Decision Gate as **continue/expand** and re-scoped off the fixed June-30 deadline. New direction: a **co-op roguelite-ARPG** — base = persistent buildable **hub** (never resets), the procedural **Expedition region = the required combat spine**, **two classes** (Warrior melee / Ranger ranged), a **persistent meta layer** (SaveData v6), readability fixed first. **Mission-as-Sortie**, pillar-safe (fulfils pillar-#4, preserves the "never a run-reset" pillar). **No time estimates** (operator directive); every slice still ends with a falsifiable fun-gate + server==client validation; netcode-heavy slices run the adversarial design-review FIRST ([[validate-netcode-design-before-coding]]).
**Committed slices (sequence; ~70 % of the chassis already exists — reuse, don't rebuild):**
- **Slice 1 — Combat Readability & HUD Declutter** ✅ **BUILT + engineering-validated 2026-06-17 ([[DR-038_Slice1_Combat_Readability_HUD_Declutter]])** — on-damage-sticky **enemy health bars** (+fade, <25 %HP always-on) in `CombatFeedbackSystem` (`Health.Current` already replicated); **telegraph fix** (per-enemy baked `EnemyTelegraph` windup ramp replacing the hard-coded `22f` + windup 18→22 + a scale-pulse); **build-mode toggle** (client `BuildPaletteState.PaletteOpen` gates the palette + a "Tab/Y — BUILD" chip); **Charger committed-lunge tell** (`[GhostEnabledBit] IsLunging` derived once/tick — one Charger re-bake). 345/345 EditMode; Play-validated (handshake intact, bake correct, no runtime errors). **Open: operator visual fun-gate.**
- **Slice 2 — Two Classes (Warrior / Ranger)** *(review-gated)*: route `MeleeComboSystem` damage through `EffectiveAbilityStats` (the highest-impact edit; `StatTarget.MeleeDamage` byte); class anchor via `AbilityRef.Id` + `CharacterId`; wire the **Cone** archetype (Warrior secondary), keep the Ranger projectile; second ability cooldown; class-select UX; class-conditioned starting `StatModifier`. Absorbs Path B's MC-6 intent (lighter).
- **Slice 3 — Expedition Combat Spine** *(review-gated)*: reactivate `ExpeditionFieldSystem`**authored-arena pool** sampled by `ExpeditionEpoch` (pool-sampling, NOT WFC/terrain-gen); `ZoneEnemySpawnSystem` (`RegionTag{Expedition}`); the **`EnemyAISystem` region-filter fix**; the **`ThreatDirector` mid-siege-return gate**; a **zone-clear reward** on `ExpeditionGateSystem`; a **replicated zone-theme byte** on the global ghost; the required sortie→clear→return→escalated-siege loop. Manage `RegionRelevancySystem` per-tick cost (cap ghosts; cosmetic props non-ghost). Absorbs Path B MC-2 (enemy mix) intent.
- **Slice 4 — Persistent Meta-Progression** *(review-gated)*: **SaveData v6** (meta-currency, unlocked classes, persistent epoch); a between-runs growth surface at the hub; persist-the-seed-regenerate-the-layout (pure-function generator).
**Per-slice forks to lock at each review:** expedition depth (one zone vs sequential+boss); shared expedition region vs per-party instances (shared recommended); zone-clear reward shape; class-select moment (menu vs at-base); meta unlock surface.
**Already shipped & code-verified (do NOT rebuild — 13/14 slice systems):** movement, dash (MC-1, fun-gate PASSED 2026-06-10), melee combo (MC-4), ranged poke; base-local Ore mining (DR-031); Turret/Wall/Fabricator palette + UITK build HUD (DR-021); Ore→Fabricator→Charge→turret economy (EB-2 / DR-033); destructible structures (EB-1 / DR-032); soft-loss Engine Core integrity + overrun flash (END-1 / DR-034); SaveData v4 + frontend menu / Continue / build menu (DR-019). The audit: 9-agent grounded gap-analysis, 2026-06-13. **Already shipped & code-verified (do NOT rebuild — 13/14 slice systems):** movement, dash (MC-1, fun-gate PASSED 2026-06-10), melee combo (MC-4), ranged poke; base-local Ore mining (DR-031); Turret/Wall/Fabricator palette + UITK build HUD (DR-021); Ore→Fabricator→Charge→turret economy (EB-2 / DR-033); destructible structures (EB-1 / DR-032); soft-loss Engine Core integrity + overrun flash (END-1 / DR-034); SaveData v4 + frontend menu / Continue / build menu (DR-019). The audit: 9-agent grounded gap-analysis, 2026-06-13.
**END-2 (SL-3) is CODE-COMPLETE + validated (2026-06-13) — the Path-A blocker is CLEARED.** The goal meter now arms a visibly-larger final siege at `Charge>=Target` (=4) and latches a terminal **Victory** (survive it) / **Loss** (Core breached during it), with a HUD banner + run-halt. 342/342 EditMode green; Play-validated server==client + no ordering cycle; pre-coding + post-impl adversarial reviews. The **fun-gate** (does the climax land?) is the one open item → folds into SL-5. See [[DR-036_END2_Final_Siege_Win_Lose]] · [[2026-06-13_SL3_END2_Final_Siege_Win_Lose]]. **Charge cadence LOCKED 2026-06-13: siege-survived-only** (goal +1 per survived siege; "Both"/Aether-deposit deferred post-slice). See [[DR-035_End_Of_Month_Slice_Adoption#Locked fork — END-2 charge cadence (2026-06-13)]]. **END-2 (SL-3) is CODE-COMPLETE + validated (2026-06-13) — the Path-A blocker is CLEARED.** The goal meter now arms a visibly-larger final siege at `Charge>=Target` (=4) and latches a terminal **Victory** (survive it) / **Loss** (Core breached during it), with a HUD banner + run-halt. 342/342 EditMode green; Play-validated server==client + no ordering cycle; pre-coding + post-impl adversarial reviews. The **fun-gate** (does the climax land?) is the one open item → folds into SL-5. See [[DR-036_END2_Final_Siege_Win_Lose]] · [[2026-06-13_SL3_END2_Final_Siege_Win_Lose]]. **Charge cadence LOCKED 2026-06-13: siege-survived-only** (goal +1 per survived siege; "Both"/Aether-deposit deferred post-slice). See [[DR-035_End_Of_Month_Slice_Adoption#Locked fork — END-2 charge cadence (2026-06-13)]].
**Critical path:** SL-1 → SL-2 → **SL-3 (END-2)** → SL-5 → SL-6 → SL-7; SL-4 (visual) runs parallel, done by Jun 23. Every milestone ends with a **falsifiable play/fun-gate**, not a test count. Full vision + visual direction + cohesion checklist + Done Definition: [[End_Of_Month_Game_Jam_Slice]]. > **⚠️ SL-1…SL-7 below are SUPERSEDED (2026-06-17, [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]) — kept as an archived reference.** The new committed work is Slices 14 above. SL-4's **visual cohesion** ("Aether Siege Outpost" palette + checklist) and SL-2's **loop-tuning** discipline still apply to the base hub and carry forward; SL-1's arena-cleanup and SL-3/END-2 (the final-siege win/lose, already shipped) remain in the build. The fixed June-30 packaging (SL-7) is dropped per the re-scope.
### SL-1 — Scope Lock & Arena Cleanup `Jun 13-15` · risk LOW ### SL-1 — Scope Lock & Arena Cleanup `Jun 13-15` · risk LOW
> **Largely DONE 2026-06-13** (with SL-4): ARPG camera locked to a research-grounded steeper telephoto (pitch 58 / dist 17 / FOV 44 so Core + arena read together); meadow noise removed (~390 cheer/village objects cut); the Ore annulus pulled into the arena (611.5 m, 12 nodes) + the Core staged as the hero. **Open:** the Pylon decision; final camera lock-in via the operator's playtest. See [[2026-06-13_SL1_SL4_Visual_Cohesion_Dark_Frontier]]. > **Largely DONE 2026-06-13** (with SL-4): ARPG camera locked to a research-grounded steeper telephoto (pitch 58 / dist 17 / FOV 44 so Core + arena read together); meadow noise removed (~390 cheer/village objects cut); the Ore annulus pulled into the arena (611.5 m, 12 nodes) + the Core staged as the hero. **Open:** the Pylon decision; final camera lock-in via the operator's playtest. See [[2026-06-13_SL1_SL4_Visual_Cohesion_Dark_Frontier]].
@@ -7,14 +7,16 @@ tags:
- art-direction - art-direction
- combat - combat
- base-defense - base-defense
status: active status: superseded
updated: 2026-06-13 updated: 2026-06-17
permalink: gamevault/06-roadmap/end-of-month-game-jam-slice permalink: gamevault/06-roadmap/end-of-month-game-jam-slice
--- ---
# End-of-Month Game Jam Slice # End-of-Month Game Jam Slice
## Decision > **⚠️ SUPERSEDED 2026-06-17 by [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]].** An operator playtest ([[Scratch Notes 6152026]]) found the single-arena base-defense loop **"stale very fast"** — the predicted cost of cutting the expedition. The project re-scoped off this fixed deadline toward a **co-op roguelite-ARPG** (procedural Expedition spine + persistent meta home base + two classes). **This doc is archived, NOT deleted** — it remains a valid *compact-showcase / fallback target* and its art-direction rules ("Aether Siege Outpost" palette, visual-cohesion checklist, Synty asset rules) **still apply** to the base hub. Current direction: [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]] · roadmap [[Backlog]] · [[Path_to_Fun]].
## Decision (original — superseded)
Build **Awakening Engine Last Stand** as the end-of-month playable slice. Build **Awakening Engine Last Stand** as the end-of-month playable slice.
+3 -1
View File
@@ -13,7 +13,9 @@ permalink: gamevault/06-roadmap/path-to-fun
# Path to Fun — the north-star roadmap # Path to Fun — the north-star roadmap
> **[ACTIVE JUNE 1330 → the slice]** Path A's spine is **COMPLETE** — all **14/14 systems shipped** (MC-0/1/4 · EB-1/2 · END-1 · **END-2 built 2026-06-13 as slice SL-3**, [[DR-036_END2_Final_Siege_Win_Lose]]). The operator answered the [Decision Gate](#the-decision-gate-mandatory-stop-after-end2) **early, as *ship the minimum***: the immediate target is the **[[End_Of_Month_Game_Jam_Slice]]** ("Awakening Engine Last Stand"), a compact single-arena base-defense demo due June 30. With END-2 in, the slice is **winnable end-to-end**; the remaining slice work is **tuning + polish, not code** (SL-1/2/4/5/6/7) — and the final-siege **fun-gate** is the one open operator validation. This doc stays the **north-star for the full game**; the slice scopes Path A to a deliverable. Milestone breakdown: [[Backlog#NEXT — Awakening Engine Last Stand (End-of-Month Slice) ★]] · adoption: [[DR-035_End_Of_Month_Slice_Adoption]]. *(Path B is untouched and provisional; the formal ship-vs-continue note is logged after June 30.)* > **[DIRECTION EVOLVED 2026-06-17 → [[DR-037_Procedural_Expedition_Spine_Two_Classes_Persistent_Meta]]]** Path A's spine is COMPLETE and the slice [[End_Of_Month_Game_Jam_Slice]] was *playtested* — and found **stale in a single arena** ([[Scratch Notes 6152026]]). The operator **answered the [Decision Gate](#the-decision-gate-mandatory-stop-after-end-2) as *continue/expand*** (not "ship the minimum"): re-scope off the fixed deadline and build a **co-op roguelite-ARPG** — a **procedural Expedition combat spine + persistent meta-progression home base + two classes (Warrior/Ranger)**, readability fixed first. This **fulfils** the long-locked pillar-#4 "procedural expeditions" and **reverses** [[DR-031_Base_Mining_Loop_Cohesion]]'s pause; it is **pillar-safe** (Mission-as-Sortie: the base never resets). The committed milestone list now lives in [[Backlog]] (Slices 14); the build notes / netcode homework below remain the engineering substrate (the dash/`SourceTick`/`StatModifier`/region/relevancy/save patterns all carry forward). Path B's combat-depth rows (MC-2/3/5/6) are **absorbed** into the new class + expedition slices.
> **[HISTORICAL — the slice, June 1330]** Path A's spine is **COMPLETE** — all **14/14 systems shipped** (MC-0/1/4 · EB-1/2 · END-1 · **END-2 built 2026-06-13 as slice SL-3**, [[DR-036_END2_Final_Siege_Win_Lose]]). The operator answered the [Decision Gate](#the-decision-gate-mandatory-stop-after-end2) **early, as *ship the minimum***: the immediate target is the **[[End_Of_Month_Game_Jam_Slice]]** ("Awakening Engine Last Stand"), a compact single-arena base-defense demo due June 30. With END-2 in, the slice is **winnable end-to-end**; the remaining slice work is **tuning + polish, not code** (SL-1/2/4/5/6/7) — and the final-siege **fun-gate** is the one open operator validation. This doc stays the **north-star for the full game**; the slice scopes Path A to a deliverable. Milestone breakdown: [[Backlog#NEXT — Awakening Engine Last Stand (End-of-Month Slice) ★]] · adoption: [[DR-035_End_Of_Month_Slice_Adoption]]. *(Path B is untouched and provisional; the formal ship-vs-continue note is logged after June 30.)*
> The plan to turn an engineering-complete foundation into a game that's fun to play. Direction locked in [[DR-028_Combat_Primary_Verb_Depth_First]]. This is the **forward** plan; [[Milestones]] stays the historical record, [[Backlog]] the loose pool. Living doc: the [Path A contract table](#path-a--the-proven-path-to-a-point-committed) is the only committed scope; everything in [Path B](#path-b--the-forever-track-provisional-not-scheduled) is provisional and re-derived after Path A's fun-gates pass. > The plan to turn an engineering-complete foundation into a game that's fun to play. Direction locked in [[DR-028_Combat_Primary_Verb_Depth_First]]. This is the **forward** plan; [[Milestones]] stays the historical record, [[Backlog]] the loose pool. Living doc: the [Path A contract table](#path-a--the-proven-path-to-a-point-committed) is the only committed scope; everything in [Path B](#path-b--the-forever-track-provisional-not-scheduled) is provisional and re-derived after Path A's fun-gates pass.
@@ -0,0 +1,92 @@
---
id: DR-037
title: Procedural Expedition Spine + Two Classes + Persistent Meta (Mission-as-Sortie redirect)
status: accepted
date: 2026-06-17
tags:
- decision
- design
- direction
- combat
- roguelite
- expedition
- classes
- meta-progression
- netcode
permalink: gamevault/07-sessions/decisions/dr-037-procedural-expedition-spine-two-classes-persistent-meta
---
# DR-037 — Procedural Expedition Spine + Two Classes + Persistent Meta (the post-playtest redirect)
> **A project-direction change, not a slice tweak.** Triggered by a real operator playtest of the shipped single-arena slice ([[Scratch Notes 6152026]], 2026-06-15). Re-scopes off the [[End_Of_Month_Game_Jam_Slice]] single-arena demo and commits Project M to a **co-op roguelite-ARPG**: a **procedural Expedition region as the required combat spine**, a **persistent meta-progression home base that never resets**, and **two classes** (Warrior melee / Ranger ranged) — with **combat readability fixed first**. **Reverses the [[DR-031_Base_Mining_Loop_Cohesion]] "focus on the base, pause the expedition" decision** deliberately, and **fulfils** the long-locked [[Pillars|pillar #4]] ("persistent buildable home base + **instanced/procedural expeditions**") that the slice had paused. Research-backed by an 8-agent design+feasibility pass (this session). Supersedes the slice as the operative target; the slice doc is kept as an optional showcase/fallback.
## Context
The slice [[End_Of_Month_Game_Jam_Slice]] ("Awakening Engine Last Stand") deliberately compressed Project M to **one compact arena** — mine → build → defend the Core through escalating Husk sieges → win/lose in 58 min — and **cut the Expedition region** (the [[DR-013_M6_Aether_Cycle_Region_Split|Blightfield at base+(1000,0,0)]]) to focus the loop ([[DR-031_Base_Mining_Loop_Cohesion]]). Path A's spine shipped 14/14 ([[DR-036_END2_Final_Siege_Win_Lose]]).
The operator then **played it** and logged [[Scratch Notes 6152026]] (2026-06-15). The core finding: **"any and all combat happens in the home base. Feels very stale very fast."** This is the *predicted cost* of the single-arena scoping — the slice doc's own "Future Work → Expedition Reintroduction" anticipated it. The notes propose four things, evaluated below; the operator chose the most ambitious coherent reading: **re-scope the deadline and build the bigger, pillar-true game** (the reference the operator named is **Shape of Dreams** — a 2025 co-op action-roguelite — *"that core game loop but modified to have a meta progression home base."*).
## Operator decisions (present-the-forks ritual, 2026-06-17)
Locked via [[present-forks-dont-auto-decide|the fork-locking ritual]] after the research pass:
1. **Sequencing = re-scope / move the deadline.** The June-30 single-arena demo is **no longer the operative target** (kept as an optional showcase/fallback, not deleted). Build the full direction. **Directive: stop estimating time / deadline-framing — "you just build, I handle deadlines."** (Engineering discipline — netcode design-reviews before heavy slices, fun-gates, server==client validation — stays; that is correctness, not scheduling.)
2. **Primary attack = two classes.** **Warrior (melee anchor)** + **Ranger (ranged anchor, manually aimed — not auto-fire)**, for co-op contrast. (Rejected: a ranged *auto-attack* primary, which the research showed collapses the action-ARPG into a passive stat-stack and violates the skill>stat-check pillar.)
3. **Expedition shape = required spine + persistent meta.** Expeditions become a **required progression step** (not an optional sidecar), with a **meta-progression layer that persists across sessions** (SaveData v6). The base remains the persistent hub.
4. **Do-now combat-readability/HUD wins = all four**, including the Charger committed-lunge tell (accepting the enemy-ghost re-bake).
## Decision
**Redirect Project M to a co-op roguelite-ARPG on the "Mission-as-Sortie" model** (Deep Rock Galactic / Cult of the Lamb / The Riftbreaker), which is the **only** model that satisfies the locked pillars:
- **The base is the persistent buildable HUB — it never resets, it only grows.** (Locked [[Identity#Open / deferred|pillar #5]]: "persistent anchor, death = respawn, *never a roguelike run-reset*" — **PRESERVED**.)
- **The Expedition region is the procedural combat SPINE** — a re-seeded run venue reached via region transit, where the bulk of the fight now happens. (Locked pillar #4: "instanced/procedural expeditions" — **FULFILLED**.)
- **A "run" is a re-seeded Expedition REGION inside the SAME persistent netcode world** — *not* a new World, *not* a base reset. The server spawns all procedural content as ordinary runtime ghosts; clients receive them via snapshots and **never run the generator****the seed never needs replicating** (the hardest distributed-determinism problem disappears).
- **Run-acquired combat buffs are run-scoped** (expire, via the existing `TimedModifier`); **deposited loot + a meta-currency fund PERMANENT base/meta growth** (SaveData v6). The two channels stay crisply distinct so nothing reads as a roguelike reset.
### Per-note evaluation (research-backed)
| # | Scratch note | Verdict | Disposition |
|---|---|---|---|
| 3 | Enemy health bars + clearer "about-to-hit" tell | **Do it now.** Industry std = *on-damage-sticky bars w/ fade* (NOT always-on) + low-HP override; telegraph = per-enemy windup ramp + longer windups + multi-sensory cue | **Slice 1** (mostly client-only; `Health.Current` already replicated, `Health.Max` baked client-side, `CombatFeedbackSystem` already pools per-entity GOs) |
| 4 | Hide buildables behind a toggled "build mode" | **Do it now.** Mirrors every roguelite's minimalist run-phase HUD | **Slice 1** (pure client-local: a `_buildModeOpen` bool gates `_paletteRow`; combat input already suppressed while the palette is active) |
| 2 | Classes, 4 attacks, run meta-buffs; melee vs ranged | **Strong direction.** Class identity = the *primary-attack archetype*, not ability count (Hades/RoR2/DRG/Gunfire). The meta-buff mechanism **already exists** (`StatModifier`+`StatRecomputeSystem`+`TimedModifier`); `AbilityRef.Id` = the class anchor; archetype stubs (Cone/Hitscan/Aoe) are wired-but-empty; 2 ability ids free | **Slice 2** (Warrior + Ranger) |
| 1 | Procedural zones / Shape-of-Dreams loop + meta home base | **GREEN-feasible, pillar-safe.** ~70% of the chassis already exists (`ExpeditionFieldSystem` is a working epoch-seeded proc-gen seeder today) | **Slice 3** (expedition spine) + **Slice 4** (persistent meta) |
### The build program (gated slices; netcode-heavy ones run the adversarial design-review FIRST per [[validate-netcode-design-before-coding]])
- **Slice 1 — Combat Readability & HUD Declutter** (mostly client-side; the do-now wins):
- **Enemy health bars** — world-space pooled bars in `CombatFeedbackSystem`, shown on the `Health.Current` decrease edge, ~3 s fade, **always-visible under 25 % HP**; cap the pool / nearest-N (horde clutter guard); **zero new replication**.
- **Telegraph fix** — replace the hard-coded `22f` ramp denominator in `CombatFeedbackSystem.UpdateEnemyDanger()` with the **per-enemy windup duration** (read baked `EnemyStats`, safe client-side); raise `GruntWindupTicks`/`ChargerWindupTicks` (≥ interp-delay + ~250 ms reaction); add a **windup scale-pulse** (multi-sensory, on the already-detected `AttackWindup` 0→nonzero edge).
- **Build-mode toggle** — a client-local `_buildModeOpen` bool; gate `_paletteRow.style.display` on it (was always-Flex on base); a Tab/gamepad bind + a "Build [Tab]" discovery chip; gate the `B/V/N/H/F/C` hotkeys on it.
- **Charger committed-lunge tell** — a replicated lunge cue (a `[GhostEnabledBit]`/byte on the Charger; **one enemy-ghost re-bake**) + a persistent directional indicator in `CombatFeedbackSystem` (today the cue *vanishes* at lunge commit when `AttackWindup→0` — the exact opposite of correct timing).
- **Slice 2 — Two Classes (Warrior / Ranger)** *(review-gated)*: route `MeleeComboSystem` damage through `EffectiveAbilityStats.Damage` (the single highest-impact edit — makes meta-buffs reach the melee verb; add `StatTarget.MeleeDamage` as a **byte**, Burst-ICE-safe); class anchor via `AbilityRef.Id` + a real `CharacterId` set; wire the **Cone** archetype (Warrior secondary) and keep the Ranger projectile; a second ability cooldown; a class-select UX; class-conditioned starting `StatModifier` seed. Avoid new `PlayerInput` buttons (player-ghost re-bake) — repurpose the Fire slot per-class.
- **Slice 3 — Expedition Combat Spine** *(review-gated)*: reactivate `ExpeditionFieldSystem` → an **authored-arena pool** (Hades/Dead-Cells *pool-sampling*, **not** WFC/terrain-gen) sampled no-repeat by `ExpeditionEpoch`; a `ZoneEnemySpawnSystem` (`RegionTag{Expedition}`, reusing `WaveSystem` ring math); the **`EnemyAISystem` region-filter fix** (today its nearest-player query is global → expedition enemies would path to invisible base players); the **`ThreatDirector` phase-gate** (don't double-arm a retaliation siege on a mid-siege return); a **zone-clear reward** hook on `ExpeditionGateSystem` Base-bound transit (run-scoped `TimedModifier` + ledger deposit); a **replicated zone-theme byte** on the GLOBAL `CycleDirector` ghost (never region-tagged); wire the **required-spine loop** (sortie → clear → return → escalated siege). Manage `RegionRelevancySystem`'s O(ghosts×connections)/tick cost — cap expedition ghost count, keep cosmetic props **non-ghost**; amortise mass spawns across ticks.
- **Slice 4 — Persistent Meta-Progression** *(review-gated + save-migration care)*: **SaveData v6** (additive; `MinLoadableVersion` unchanged → old saves 0-default) for a meta-currency, unlocked classes, and a persistent run/epoch counter; a between-runs growth surface at the base; **persist the seed, regenerate the layout** (the server reproduces the zone from the saved epoch — keep the generator a pure function of `(epoch, depth)` with stable ordering, never seeded off `ServerTick` or query-iteration order).
## Reconciliation with the locked pillars (why this is NOT a pivot away from the vision)
- **Pillar #4 ("persistent buildable home base + instanced/procedural expeditions") — FULFILLED.** This was always locked; the slice merely paused the expedition half.
- **Pillar #5 ("never a roguelike run-reset") — PRESERVED.** Mission-as-Sortie never resets the base/gear/server state; only run-scoped buffs and the zone layout reset. Commercial proof: Ghost Ship built a **separate game** (DRG: Rogue Core) to add run-resets because the co-op base audience rejects them — Project M aligns with original-DRG, not Rogue Core.
- **Combat = primary verb ([[DR-028_Combat_Primary_Verb_Depth_First]]) — REINFORCED.** The expedition is *more* combat, not a detour from it; classes deepen the verb.
- **[[DR-031_Base_Mining_Loop_Cohesion]] — REVERSED, deliberately + logged.** DR-031 paused the expedition for slice focus; the playtest proved that focus is what made combat stale. The expedition is reactivated as the combat spine.
## Research backing (8-agent design + feasibility pass, this session — durable record)
- **Feasibility = GREEN** (DOTS/Netcode architect, context7-verified against Entities 6.5 / Netcode-for-Entities + ECS samples). Decisive fact: **server-spawns-ghosts ⇒ no seed replication, no cross-client determinism problem.** `ExpeditionFieldSystem` already does epoch-seeded deterministic scatter (`Unity.Mathematics.Random` seeded by `ExpeditionEpoch`, NOT tick/wall-clock) + `ecb.Instantiate` + `RegionTag{Expedition}` + relevancy-hide + teardown — a working proc-gen seeder *today*. Runtime ghosts (not prespawned-subscene ghosts) are the correct tool for procedural gameplay content (prespawn sync needs matching subscene-hash + ghost-id range + baseline hash — which procedural layouts can't satisfy). `SceneSystem.LoadSceneAsync` + `SceneLoadFlags.NewInstance` exists for ghostless cosmetic chunks but is the harder path; prefer runtime ghosts for gameplay + client-only decor off a replicated theme byte.
- **Reconciliation model = Mission-as-Sortie** (hub-meta agent: DRG / Cult of the Lamb / Riftbreaker / Remnant 2 / Hades). Stale-arena root cause synthesised: the environment + enemy roster + objective are all fixed AND there's no visible session-to-session growth — Project M currently solves **none** of the three anti-fatigue levers (procedural venue variety / visible persistent growth / thematic zone variety). **Encounter variety > structural variety > cosmetic variety** (cosmetic-only fails within 23 runs).
- **Shape of Dreams** (the named reference): co-op action-roguelite, 14p, 4 Memory slots + an Identity Memory (= the class anchor) + per-skill Essence augments, run-reset with **no persistent hub** — the operator's "modified to have a meta-progression home base" is exactly the delta Project M's base supplies. Steal: curated-room shuffle (not terrain gen), Identity-Memory-as-class-anchor, Essence-augments ≙ `StatModifier`, individual co-op loot. Avoid: the no-hub pure-run-reset; deep "arcane" constellation grind.
- **Class kits**: 24 active abilities is the readable sweet spot; **melee-primary is the more skill-expressive first class**; augments layered additive→behavioral→transformative; co-op synergy via *complementary* range bands (melee Warrior + kiting Ranger) — directly motivates the two-class choice.
- **Combat readability**: on-damage-sticky bars + fade + low-HP override (always-on clutters hordes); telegraph must ramp 0→1 ending *at* impact (the `22f` constant plateaus early for long windups); multi-sensory (shape+color+audio+scale) per Xbox XAG 103; world-space **Canvas** (not UITK world panels — Unity 6 sorting bugs vs the sortingOrder-50 HUD).
- **Proc-gen content**: authored-arena **pool sampling** (Hades/Dead Cells/Gungeon), ~1220 arenas/biome, no-repeat per run; **WFC is overkill**; the zone-clear *reward* hook is non-negotiable.
*(Full agent output + ~80 cited sources captured in the session transcript; key sources: Shape of Dreams Steam/reviews, DRG wiki + dev blogs, Hades/RoR2/Gunfire wikis, Cult of the Lamb / Remnant 2 / Riftbreaker design articles, Xbox XAG 103, gamedeveloper.com telegraphing + M.E.R.C. proc-gen, Dead Cells / Enter the Gungeon generation breakdowns, context7 Entities 6.5 / Netcode + ECS-samples.)*
## Consequences
- **The project's identity sharpens** from "single-arena base-defense demo" to "co-op roguelite-ARPG with a persistent buildable base" — the strongest version of the locked pillars, validated by the operator's own playtest.
- **Low-risk first win**: Slice 1 (readability + declutter) materially improves the *current* build immediately, mostly client-side, no design review needed (except the small Charger re-bake).
- **The heavy lifts reuse, not rebuild**: region split, runtime ghost-spawners, the `StatModifier`/`TimedModifier` meta-buff pipeline, the additive SaveData contract, the on-demand world lifecycle, and `ExpeditionFieldSystem` are all reused.
- **Netcode correctness items flagged** (to be confirmed in each slice's design review): `EnemyAISystem` region-filter; `ThreatDirector` mid-siege return gate; `RegionRelevancySystem` per-tick cost + cosmetic-props-must-be-non-ghost; mass-spawn sync-point amortisation; new `StatTarget` bytes must stay byte-compared (Burst ICE); avoid new `PlayerInput` events (re-bake); persist-seed-regenerate-layout determinism.
- **The slice is archived, not deleted** — [[End_Of_Month_Game_Jam_Slice]] gains a SUPERSEDED banner and remains a fallback/showcase; [[Path_to_Fun]] and [[Backlog]] are re-pointed at this direction; [[Pillars]] records the expedition-spine + 2-class + persistent-meta commitments; [[DR-035_End_Of_Month_Slice_Adoption]]'s "ship the minimum" Decision-Gate answer is **superseded** by this "continue/expand" answer.
- **Open per-slice forks** (to lock at each slice's review): expedition depth (one zone/sortie vs sequential zones+boss); single shared expedition region vs per-party instances (shared recommended); zone-clear reward shape; class-select moment (menu vs at-base); meta-currency unlock surface. **Validation culture unchanged**: every slice ends with a falsifiable fun-gate, not a test count.