Docs: DR-051 + session log — LANTERN realignment & purge bookend
DR-051 (delete-not-mothball, four-scene contract, one look, Bathynaut in), session log w/ commit table + field notes, strip/mothball inventory status banner (MOTHBALL rows -> DELETED), CLAUDE.md updated (scene contract, DR-051 purge bullet, LANTERN murk world bullet, save v7, retired bullets archived 07-15; 39.8 KB, under budget). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,13 @@ permalink: gamevault/06-roadmap/lantern-strip-mothball-inventory
|
||||
|
||||
# LANTERN — Strip / Rework / Mothball Inventory
|
||||
|
||||
> **STATUS UPDATE 2026-07-15 ([[DR-051_Lantern_Realignment_Purge]]):** every **MOTHBALL**-verdict row below was
|
||||
> **DELETED outright** (operator overrode the reversibility stance — git history is the archive): automation
|
||||
> chain, EB-2 turrets, END-1 Core, END-2 win/lose, CyclePhaseSystem/ThreatDirector, plus the legacy
|
||||
> single-ability path (`AbilityRef`/`AbilityCooldown`/`EffectiveAbilityStats`), first-run onboarding, the old
|
||||
> Synty biomes/scenes, and the 10 old-theme enemy prefabs. Save epoch is v7 (fresh). `CharacterId` →
|
||||
> `FrameKind`. KEEP/REWORK rows remain the live quarry map.
|
||||
>
|
||||
> Phase 0.2 of [[Roadmap_Lantern_Slice]], adopted under [[DR-048_Lantern_Adoption_Full_Pivot]]. Inventories
|
||||
> every current subsystem against the LANTERN vertical slice. **Existing code is quarry, not foundation** —
|
||||
> this table records the salvage call, not a migration contract. The per-phase build specs (deeper technical
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
permalink: gamevault/07-sessions/2026/2026-07-15-lantern-realignment-purge
|
||||
---
|
||||
|
||||
---
|
||||
title: 2026-07-15 — LANTERN Realignment & Purge (the whole plan, shipped)
|
||||
date: 2026-07-15
|
||||
links: [[DR-051_Lantern_Realignment_Purge]], [[DR-048_Lantern_Adoption_Full_Pivot]], [[Lantern_Strip_Mothball_Inventory]], [[Roadmap_Lantern_Slice]]
|
||||
---
|
||||
|
||||
# 2026-07-15 — LANTERN Realignment & Purge
|
||||
|
||||
Operator brief: the re-enabled Synty world didn't match ArtStaging; old systems/scenes kept getting in the way. "The new direction is absolute — don't worry about preserving stuff. Exactly these scenes: DevSandbox (Gym renamed, old one deleted), ArtStaging, Game, MainMenu — all one look. Then the new character model, fully in, so movement/animation tuning can start."
|
||||
|
||||
Three plan-mode forks locked by the operator: **delete outright** (not mothball) · **Game = LANTERN seabed arena** · **legacy AbilityRef/CharacterId refactor INCLUDED**.
|
||||
|
||||
## Shipped (10 commits on main, every one compile-clean + tests green)
|
||||
|
||||
| Commit | What |
|
||||
|---|---|
|
||||
| `511e78556` | Checkpoint of the operator's working tree (Gym→GymSub repoint, SampleScene deletion, ai.assistant pkg re-added) |
|
||||
| `a0f6d4a5c` | B1: automation chain deleted (−43 tests → 459). `RuntimePlacedTag` rescued into StructureComponents.cs |
|
||||
| `835dace21` | B2: EB-2 turrets deleted (−7 → 452) |
|
||||
| `b34945c2d` | B3+B5: cycle/core/win-lose spine + onboarding deleted; save epoch v7 (→ 390 green; Play-clean) |
|
||||
| `4a8220ad3` | B6: legacy single-ability path deleted; sockets seed unconditionally (Play-verified: frame 2, Sparks [7,8,6,9] on a NON-gym spawn) |
|
||||
| `77de740b6` | B7: `CharacterId` → `FrameKind` |
|
||||
| `c58439d33` | P3: PostFX_Lantern + Env_SeabedKit + scene surgery (Gym→DevSandbox rename, SyntyWorld/biomes deleted, ScenePolicy gates, murk WorldAtmosphere) |
|
||||
| `12d5b96b7` | P4: arena roster [Drowner,Grindylow,Drowner,Drowner]; 10 old enemy prefabs deleted; invisible-wall collider groups removed |
|
||||
| `210d30740` | P5: Bathynaut suit body onto Player.prefab in place (PlayerRigTools.BuildBathynautPlayer) |
|
||||
| (docs) | DR-051 + this log + inventory/CLAUDE.md updates |
|
||||
|
||||
## Field notes / gotchas confirmed this session
|
||||
|
||||
- **The misalign hazard is alive**: two apply_text_edits landed on wrong spans mid-session (BuildSendSystem orphan fragment; RunDirectorSystem double-`if`) — caught by the re-read-neighbors habit both times. The span validator also false-positives ("duplicate ResourceSprite", tuple-deconstruction "unbalanced braces") — `replace_method`/`delete_method` are the reliable fallback; `validate:"basic"` clears some but not all.
|
||||
- **Deleting a component file can take a KEEPER with it**: `RuntimePlacedTag` (save marker) lived inside AutomationComponents.cs. Grep the whole file's declarations before deleting "a dead system's components".
|
||||
- **"Frozen enemies" that aren't**: AFK-player samples caught identical enemy positions + flat HP across 60s and looked like the no-pathfinding freeze — it was mid-cycle sampling; the player had died and respawned between samples. Check respawn-invuln ticks before diagnosing a freeze.
|
||||
- **Synty character prefabs are 20-SMR variant containers** — a flatten copies ALL of them; only the active ones matter. Strip inactive SMRs after the flatten (17 removed from Player.prefab).
|
||||
- **Removing the skybox exposes camera clearFlags** — corners render the default blue; set SolidColor + deep-water background wherever the LANTERN look lands.
|
||||
- The renamed DevSandbox **revived** `DebugOverlay`/`PixelArtDevControls`/`ClassSwitchHotkeySystem` (they gate on the "DevSandbox" scene name and had been dead in Gym).
|
||||
|
||||
## Verified end-state
|
||||
|
||||
- Game (Play): murk fog/ambient live via the retuned atmosphere system, seabed kit + warm/cold pools, Drowner wave spawns → seeks → strikes → kills the AFK player → respawn. Zero errors.
|
||||
- DevSandbox (Play): LANTERN look + Bathynaut suit player idling correctly (not T-posed/sunken), Rukhanka rig baked, 9 drive params, dev overlay + re-meant wave buttons + F1/F2 present.
|
||||
- 390/390 EditMode tests green.
|
||||
|
||||
## Next session
|
||||
|
||||
**Movement/animation tuning** (the operator's stated priority — now unblocked): CC feel knobs + locomotion blend + clip pass on the suit, live TuningConfig knobs already in the overlay. Follow-ups parked in DR-051 (EnemyRigTools templates, suit attachments via /art-dev, fog-density taste pass, HUD vocab).
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: DR-051 — LANTERN Realignment & Purge (delete-not-mothball, four scenes, one
|
||||
look, Bathynaut in)
|
||||
status: accepted
|
||||
date: 2026-07-15
|
||||
supersedes: the MOTHBALL verdicts in [[Lantern_Strip_Mothball_Inventory]] (now DELETED);
|
||||
parts of [[DR-019_Frontend_Menu_Settings_Saves_Build]] (save epoch)
|
||||
permalink: gamevault/07-sessions/decisions/dr-051-lantern-realignment-purge
|
||||
---
|
||||
|
||||
# DR-051 — LANTERN Realignment & Purge
|
||||
|
||||
## Context
|
||||
|
||||
Post-DR-048 the repo still half-spoke the old direction: three visual regimes (Game daylight-desert · Gym/DevSandbox ACES-scifi · ArtStaging murk-without-postfx), `WorldAtmosphereSystem` repainting Game to meadow/amber every frame, six presentation systems string-gated to `scene.name == "Game"`, two overlapping dev scenes, and the dead siege/cycle/automation web resurfacing in every search. The operator declared the new direction absolute ("don't worry about preserving stuff") and asked for a realignment so progress stops being a fight. Plan approved 2026-07-15; all parts shipped same-session.
|
||||
|
||||
## Decisions
|
||||
|
||||
1. **Delete, don't mothball** (operator-confirmed, overrides the inventory's reversibility stance): the MOTHBALL-verdict systems are GONE — automation chain (Harvester/Conveyor/Fabricator + ProductionMath), EB-2 turret defense, END-1 losable Core, END-2 win/lose (GoalProgress/RunOutcome/RunPhase), CyclePhaseSystem/CycleState/CycleRuntime, ThreatDirector/ThreatState/ThreatConfig, the whole first-run Onboarding slice. Git history is the archive. REWORK-verdict quarry (boons, run lifecycle, regions/relevancy, save HOW, build/grid, ledger/harvest, meta shop) survives.
|
||||
2. **Wire-compat discipline held through deletion**: byte VALUES stay reserved, never renumbered — `StructureType` 1-4, `ResourceId.Charge`=4, `DebugOp` 3/10/11, `TuningKnob` 20-23. `DebugOp.SpawnWave`(0) and `EndSiege`(1) are RE-MEANT (force-next-wave / quiet-the-arena) on the same bytes.
|
||||
3. **Waves are UNGATED** — `WaveSystem` runs wherever a `WaveDirectorAuthoring` is baked (placement decides; GymSub has none). The old CycleState-Siege gate died with the cycle.
|
||||
4. **Save epoch v7, fresh** (operator pre-approved): `MinLoadableVersion = CurrentVersion = 7`; goal/core/outcome + conveyor/machine-IO fields dropped; `RollTerminalCampaignForward` deleted. `RunDirectorSystem`'s terminal bank is now the sole autosave trigger.
|
||||
5. **Sockets are THE ability model**: legacy `AbilityRef`/`AbilityCooldown`/`EffectiveAbilityStats`/`DefaultAbility` deleted; `GoInGameServerSystem` seeds the per-frame 4-socket Spark loadout UNCONDITIONALLY (was gym-only — the linchpin); class swap = FrameId + socket re-seed + `SocketCooldown` reset; weapons are stat-sticks (`GrantedAbilityId` gone); HUD cooldown bar reads socket 0.
|
||||
6. **`CharacterId` → `FrameKind`** (enum + call sites; byte values unchanged; `CharacterStatsDefinition` SO class name deferred — asset-binding risk).
|
||||
7. **The scene contract — exactly these project scenes**: `MainMenu` (build 0) · `Game` (build 1, the seabed-arena slice Phase 2 grows into) · `DevSandbox` (RENAMED from Gym, GUID preserved → GymSub wiring + the "DevSandbox"-gated F1/F2 dev scripts revived) · `ArtStaging` (art viewing, no player). Old DevSandbox.unity deleted; SampleScene already gone.
|
||||
8. **One look, one source of truth**: `PostFX_Lantern.asset` (ACES + cool bloom 0.6 + vignette 0.28 + teal filter) on all three lit scenes; `Env_SeabedKit.prefab` (ArtStaging's seabed/flora/snow/caustics/warm-pool/StagingAmbiance, prefab-ized) placed in Game + DevSandbox and CONNECTED in ArtStaging; unified RenderSettings (no skybox, Exp² teal fog {0.02,0.10,0.12}, flat ambient {0.03,0.055,0.08}; density is the per-scene readability knob: 0.035 play / 0.075 staging); camera clearFlags SolidColor deep-water (no-skybox corners). PostFX_DarkSciFi/PostFX_Daylight/Sky_DaytimeProcedural deleted.
|
||||
9. **`ScenePolicy.IsGameplayScene()`** (Game + DevSandbox) replaces the six scattered `scene.name == "Game"` gates. `WorldAtmosphereSystem` rewritten as water-column murk (biomes re-meant kelp/trench/gloam-bloom; Ground_Arid tint block deleted).
|
||||
10. **Arena roster**: WaveDirector + ZoneEnemyDirector = `[Drowner, Grindylow, Drowner, Drowner]` (kind slots; re-pointed BEFORE deleting the 10 old-theme enemy prefabs — the null-skip pool-collapse hazard). `EnemySpit` kept for a future ranged kind. Landmark/prop collider groups deleted from the subscene (their visuals died with the biomes → invisible walls).
|
||||
11. **Bathynaut on the player**: `PlayerRigTools.BuildBathynautPlayer` swaps the suit body onto `Player.prefab` IN PLACE (GUID preserved; ghost surface unchanged → no netcode review needed). Both frames share the visual for now. **Movement/animation tuning is unblocked.**
|
||||
|
||||
## Evidence
|
||||
|
||||
Tests 502 → 390 green at every batch boundary; Play world-creation verified after B3, B6, P3, P4, P5 (zero console errors); full loop Play-verified (waves spawn → seek → strike → player death → respawn); suit renders + idles under the murk with all 9 Rukhanka drive params.
|
||||
|
||||
## Follow-ups
|
||||
|
||||
- `EnemyRigTools` `Variant.Template` paths reference deleted prefabs (Enemy.prefab etc.) — re-point to `EnemyDrowner.prefab` as the chassis template before the next rig rebuild.
|
||||
- Suit kitbash attachments (brass dome, tank pack, shoulder lamp) — one `/art-dev` export + bone-parent pass.
|
||||
- Fog-density + grade tuning with the operator (knobs, hue locked); ★ A0 sign-off effectively rides the new shared look.
|
||||
- HUD still speaks old vocab (Aether/Ore/Bio, AT BASE, HUSKS) — the currency re-mean + HUD re-skin are later phases.
|
||||
- Deferred: `CharacterStatsDefinition` class rename; CycleDirector naming (Phase 2's PocketTag pass owns it).
|
||||
@@ -471,3 +471,14 @@ The project pivoted to **LANTERN** ([[DR-048_Lantern_Adoption_Full_Pivot]]; desi
|
||||
- **Core loop = ready-check multi-room RUNS ★ (DR-044/045/046):** base = pure SPEND hub. `RunDirectorSystem` = sole `RunInfo` writer (`[UpdateBefore(CyclePhaseSystem)]`; nothing else in the room chain touches CyclePhase); banks Charge+retaliation once-per-`RunEpoch` on boss-clear ONLY; strips the boon band + `BoonOffer`s on exit; teleports ONLY launch-stamped `RunParticipant`s (released on Returning). Rooms spawn per `RoomEpoch`, `RoomTag`-torn-down, gate on a PORTAL (`RunLifecycle.RoomExplore=6` loot window; `PortalInteractRequest`→server `PortalCommand`). Class + per-run PREP spent at base (Staging-gated RPCs via shared `ClassSwapUtil`; prep `StatModifier` band stripped on Returning). `Health.Max` is a `[GhostField]`. Boss = server-only `BossState`/`BossAISystem` (sole boss mover). ★ **a serialized prefab bool ignores the C# initializer — flip the value in the prefab.** Feel/tuning detail → [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]] · [[DR-045_Combat_Demo_Feel_Boss_Fight]] · [[DR-046_Base_Expedition_Ties_Portal_Class_Prep]].
|
||||
|
||||
The general gotcha "a serialized prefab bool ignores the C# initializer — flip the value in the prefab" is kept inline in CLAUDE.md (broadly applicable beyond this loop).
|
||||
|
||||
## 2026-07-15 — Realignment purge (DR-051): siege-era / automation / GoalProgress bullets retired from CLAUDE.md
|
||||
|
||||
Archived verbatim from CLAUDE.md when the systems they governed were DELETED (LANTERN realignment, DR-051).
|
||||
The surviving invariants (ledger spend-in-place soft-fail; snapshot-above-early-return) stay inline in CLAUDE.md.
|
||||
|
||||
- **Siege-era systems ★ (EB-1/2 · END-1/2 — mothball-bound at Phase 2; these INVARIANTS outlive them):** ★ a Health-less machine silently drops OUT of the aggro snapshot (snapshot ABOVE the early-return; aggro weight <1 gets SQUARED) · spend from the ONE `GetSingletonEntity<ResourceLedger>`, afford→act else SOFT-FAIL (no cooldown-burn), read LIVE in-loop (no hoist) · `CyclePhaseSystem` = SOLE Phase writer (loss edges live there; transient flags, NOT latching) · **`RunOutcome{[GhostField] byte}` is REPLICATED — never client-derive the win/lose banner.** [[DR-032_EB1_Machines_Can_Die]] · [[DR-033_EB2_Felt_Spend_Charge_Economy]] · [[DR-034_END1_Losable_Core]] · [[DR-036_END2_Final_Siege_Win_Lose]].
|
||||
- **`GoalProgress{[GhostField] int Charge,Target}`** (win meter — ≠ the `ResourceId.Charge` ammo) rides the CycleDirector ghost; buffs/tiers reuse `StatModifier`→`EffectiveAbilityStats`.
|
||||
- **Automation (server-only):** catch-up `ProductionMath.CyclesDue` **lower-bound 0**; `RuntimePlacedTag`=player-built. [[DR-020_M7_Automation_Production_Chains]].
|
||||
- (Persistence bullet, pre-v7 form): **born-correct load** — `CycleDirectorSpawnSystem` stages `PendingSave` AT SPAWN; `BaseRestoreSystem` replays structures charge-free + REMAINING-tick cooldowns + HP. `SaveService.Load` = additive floor `[MinLoadableVersion=2, Current]` (old saves load; missing field 0-defaults).
|
||||
- (Netcode bullet, pre-purge form): **Shared GLOBAL state (cycle phase, resource ledger, goal meter) rides an UNTAGGED ghost**, never a region-tagged one (`SetIsIrrelevant` would hide it cross-region). Resolve the ledger via its DISTINCT `ResourceLedger` tag (the multi-`StorageEntry` "multiple instances" rule — EB-2 line).
|
||||
|
||||
Reference in New Issue
Block a user