Docs: truth pass over CLAUDE.md, DRs and the MOCs (audit M13/M14/M15/M16/M19/L11/L12)
CLAUDE.md — it is loaded every session, so its errors cost the most:
- M13: it still said "No world code until the world-model spike passes
its design review" while DR-049 has been `accepted` since 07-13 and the
roadmap says PASSED. A hard contradiction between the two authority
docs, with CLAUDE.md winning by being always-loaded — plausibly part of
why Phase 2 never started. Now points at the build spec, warns it needs
re-anchoring, and links the parked engine fork.
- Records the H2 hazard as a rule: a socket whose SparkId is missing from
the baked AbilityDatabase silently reads Damage/Range/Cooldown 0.
- L12: the asmdef table was stale on all four rows; also notes the fifth
compilation unit (Scripts/Editor has no asmdef) and that tests now
reference Authoring.
- M19: per-machine setup — the machine-loss recovery checklist — was
missing Blender + blendermcp (which the committed /art-dev skill
hard-requires) and ctx7, and claimed a ${CLAUDE_PROJECT_DIR} in
.mcp.json that isn't there.
- Structures / harvest / persistence / BefourStudios bullets rewritten:
they described deleted subsystems.
- Net-zero rule honoured: the additions pushed it to 41,057 (over the
40,960 hard limit), so two long art-pipeline bullets moved verbatim to
the gotchas archive under a dated heading. 39,661 now — inside the
file's own 39,936 soft ceiling.
- M14: DR-053 files the Bevy fork as PARKED. The guide was reachable from
NOTHING — one file, zero inbound links, and its gating instruction
lived only in machine-local memory, which CLAUDE.md explicitly forbids
as a sole home. It now has a committed home and inbound links.
- DR-054 records this purge, including the three files that were in the
delete set until their consumers were checked and turned out to be
load-bearing.
- M15: 13 superseded DRs re-statused with `superseded_by`. Only DR-002
carried the field before, though the project's own template prescribes
it.
- M19: Home.md stated three wrong facts (latest DR, latest session, date)
— refreshed. Pillars.md and Systems_Index.md now carry warning banners:
both assert things the purges falsified, and Systems_Index still claims
to be "the accurate map of what exists in code today".
- L11: the 4 genuinely-broken wikilinks fixed (typo'd DR filenames). Zero
broken vault-internal links now.
- Session log written — the last three commits before today had none,
breaking the protocol's own bookend rule.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
tags:
|
||||
- moc
|
||||
- home
|
||||
updated: 2026-07-13
|
||||
updated: 2026-08-07
|
||||
permalink: gamevault/00-home/home
|
||||
---
|
||||
|
||||
@@ -13,15 +13,17 @@ Multiplayer game on **Unity DOTS** (Entities) + **Netcode for Entities** (server
|
||||
> **Current direction: LANTERN** (locked 2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]) — a co-op
|
||||
> action-RPG where **your territory is light**: what you light stays, what stays dark rerolls. SoD-grade
|
||||
> skillshot combat + modular Spark kits + a seed-pinned pocket-graph world. Design: [[Identity_Lantern]];
|
||||
> roadmap: [[Roadmap_Lantern_Slice]]. Prior directions (Awakening Engine, Co-op Hades) are kept as history.
|
||||
> roadmap: [[Roadmap_Lantern_Slice]]. Prior directions (Awakening Engine, Co-op Hades) are kept as history — their CODE was deleted 2026-08-07
|
||||
> ([[DR-054_Audit_Purge_2026-08]]); git is the archive. The engine fork is parked, not adopted
|
||||
> ([[DR-053_Engine_Fork_Bevy_Parked]]).
|
||||
|
||||
## Map of Content
|
||||
|
||||
- **Vision** → [[Pillars]] — design pillars & locked decisions · [[Identity_Lantern]] — the fiction (light-as-territory abyssal co-op) · [[Art_Direction_Lantern]] — style bible & material decision · [[Theme_Direction_Candidates]] — the exploration behind the pivot
|
||||
- **Game Design** → [[Systems_Index]] — per-system design docs
|
||||
- **Roadmap** → **[[Roadmap_Lantern_Slice]]** (operative) · [[Lantern_Strip_Mothball_Inventory]] (salvage map) · [[Lantern_World_Model_Spike]] (★review-first) · [[Backlog]] / [[Path_to_Fun]] / [[Milestones]] / [[Iteration_2026-07_CoopHades]] (history).
|
||||
- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-07-13_Lantern_Phase0_Design_Pass_B]] · [[2026-07-13_Lantern_Phase0_Adoption_Pivot]])
|
||||
- **Decisions** → `07_Sessions/_Decisions/` — decision records DR-001 … DR-050 · [[DR-001_Netcode_Test_Harness]] · latest [[DR-050_Lantern_Phase1_Combat_Design]] (Phase 1 combat, review-hardened) · [[DR-049_Lantern_World_Model_Design]] · [[DR-048_Lantern_Adoption_Full_Pivot]]
|
||||
- **Sessions** → `07_Sessions/2026/` — dated work logs (latest: [[2026-08-07_Audit_Remediation]])
|
||||
- **Decisions** → `07_Sessions/_Decisions/` — decision records DR-001 … DR-054 · latest [[DR-054_Audit_Purge_2026-08]] (the base/expedition shell deleted) · [[DR-053_Engine_Fork_Bevy_Parked]] · [[DR-052_SoD_Facing_Underwater_Feel]] · [[DR-051_Lantern_Realignment_Purge]] · [[DR-048_Lantern_Adoption_Full_Pivot]]. Superseded DRs now carry `status: superseded` + `superseded_by`.
|
||||
- **Meta** → [[Documentation_Protocol]] · [[Tags]]
|
||||
- **Templates** → [[Session_Log_Template]] · [[Decision_Record_Template]]
|
||||
|
||||
|
||||
@@ -7,6 +7,13 @@ updated: 2026-05-29
|
||||
permalink: gamevault/01-vision/pillars
|
||||
---
|
||||
|
||||
> [!warning] **AUDIT NOTE 2026-08-07 — parts of this page are stale and self-contradictory.**
|
||||
> The 2026-08-06 audit found: the automation/persistent-base claims and the turret pillar describe a
|
||||
> direction deleted by [[DR-051_Lantern_Realignment_Purge]] and [[DR-054_Audit_Purge_2026-08]]; and the
|
||||
> page locks **soft auto-target in-arc** in one place and **soft auto-target CUT** in another. The CUT lock
|
||||
> is the current one ([[DR-052_SoD_Facing_Underwater_Feel]] — manual aim is the SoD pillar). Treat
|
||||
> [[Identity_Lantern]] as the live design and this page as pillars-plus-history until it is rewritten.
|
||||
|
||||
# Design Pillars & Locked Decisions
|
||||
|
||||
> The few non-negotiables every system must serve. Keep this short; promote only decisions that are truly locked.
|
||||
|
||||
@@ -6,6 +6,12 @@ updated: 2026-06-08
|
||||
permalink: gamevault/02-game-design/systems-index
|
||||
---
|
||||
|
||||
> [!warning] **AUDIT NOTE 2026-08-07 — this index is NOT the accurate map of current code.**
|
||||
> Last genuinely updated 2026-06-08. Since then DR-051 and [[DR-054_Audit_Purge_2026-08]] deleted the M7
|
||||
> automation chain, the run/room lifecycle, meta shop, boons, build/structures, storage,
|
||||
> inventory/equipment, the enemy variants and the boss; and the LANTERN socket/Spark/relevancy systems it
|
||||
> never mentions are the live combat model. **Read the code, or [[DR-054_Audit_Purge_2026-08]], not this.**
|
||||
|
||||
# Systems Design — Index
|
||||
|
||||
> [!info] LANTERN pivot (2026-07-13, [[DR-048_Lantern_Adoption_Full_Pivot]]).
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
# 2026-08-07 — Full-stack audit + remediation
|
||||
|
||||
**The ask** (operator): *"Do a comprehensive audit of the current state of the project at multiple layers… then
|
||||
produce a concise report… Be unbiased, concise, and above all accurate. Don't make assumptions if you can verify."*
|
||||
Then: *"Go through and fix ALL issues… Be complete and thorough."*
|
||||
|
||||
## The audit
|
||||
|
||||
8 parallel dimension auditors (code, netcode, tests, docs, process, design, art, infra), each adversarially
|
||||
re-verified by an independent agent — 16 agents, 0 errors — plus my own live Play-mode verification across all three
|
||||
player-facing scenes. **46 findings**: 1 critical, 6 high, 20 medium, 19 low. Report + full evidence:
|
||||
`scratchpad/AUDIT_2026-08-06.md`, published as an artifact.
|
||||
|
||||
**The headline, found by playing the game rather than reading it:** the LANTERN pivot (locked 07-13) had reached the
|
||||
design docs and combat internals and almost nothing a player touches.
|
||||
|
||||
- `MainMenu` said **"PROJECT M — Frontier colony — co-op"** (the Awakening-Engine tagline, two directions stale) with
|
||||
Warrior/Ranger buttons and a "Replay Tutorial" button arming a system DR-051 deleted.
|
||||
- `Game.unity` was the co-op-Hades expedition game: AT BASE, meta shop, prep loadout, `Tab BUILD`.
|
||||
- **All four ability sockets in the shipping scene read `Damage=0 Range=0 Cooldown=0`** — the 5 Sparks were in
|
||||
`GymSub.unity` and never in `Gameplay.unity`. Melee and dash were the only working verbs in the built game.
|
||||
- Expedition rooms scattered **47 Synty desert props** (cacti, tumbleweeds) into the seabed murk.
|
||||
- Enemy variety was **structurally inert** — Charger/Spitter/Swarmer authoring on ZERO prefabs, so ~272 lines of
|
||||
Bursted AI, `BossAISystem` and the whole escalation curve could never match a chunk, while 734 lines of green
|
||||
tests certified them.
|
||||
|
||||
## Three things I got wrong and corrected
|
||||
|
||||
Worth recording, because the pattern (verify, don't trust the report) is the point.
|
||||
|
||||
1. **"Server runs at 120 Hz"** — my own first measurement. It was a `NetworkTick.SerializedData` validity-bit
|
||||
artifact (the field advances by 2 per tick). Real rate: **60.0**. Caught before it reached the report.
|
||||
2. **"10 test files leak ECS Worlds"** — an agent finding, from counting `.Dispose()` tokens, which misses
|
||||
`using (world)`. Measured empirically: `World.All` is 6 before the suite and 6 after. **Refuted.**
|
||||
3. **"gitea lacks the LFS locking API, so backup completeness is unproven"** — the remote reports locking support;
|
||||
`git lfs push --dry-run` returns **0 pending objects**. The 8.3 GB backup is genuinely complete. **Refuted.**
|
||||
|
||||
## Remediation — 8 commits, all green
|
||||
|
||||
| Batch | What |
|
||||
|---|---|
|
||||
| B0 | PAT stripped from `.git/config`; `lfs.allowincompletepush` unset; `*.glb`/`*.gltf`→LFS; deny-list widened to `git restore`/`checkout --`/`stash`; `settings.local.json` cleaned; pushed gitea; **LFS completeness proven** |
|
||||
| B2+B3 | **~140 files deleted** — run FSM, meta shop, prep, boons, build/structures, storage, inventory/equipment, route/portal, ready-check, enemy variants, boss. Scripts 335→233, Tests 77→47 |
|
||||
| B4 | 5 Sparks into `Gameplay.unity`; 6 orphaned authoring objects + `RoomDressing` removed; 4 dead prefabs; **Warrior/Ranger → Bathynaut/Harpooner** (93 sites, byte values pinned); menu re-titled LANTERN |
|
||||
| B1 | Two systems timing INTERPOLATED ghosts on the PREDICTED tick, fixed; **terminal RPC reaper** + 3 regression tests; `Simulate` filter made unconditional |
|
||||
| B5 | Tuning-invariant tests (knob round-trip, reserved indices, melee coupling); `ProjectM.Authoring` reachable from tests |
|
||||
| B6 | `EmissiveGloam` DOTS instancing + DepthOnly pass; `EnemyRigTools` revived; 19 dead materials |
|
||||
| B7 | **Assets 14 GB → 5.5 GB** — BefourStudios (4 reachable files of 8.2 GB), 92 vendor demo scenes, toon-shader pkg, Screenshots out of `Assets/`; MCP package pinned to a SHA |
|
||||
| B8 | CLAUDE.md truth pass (back under its own budget); DR-053/054; 13 DRs re-statused; Home/Pillars/Systems_Index |
|
||||
|
||||
**304/304 EditMode green, 0 compile errors**, `Game.unity` plays with live socket stats and no leaked RPCs.
|
||||
|
||||
## Verified live, not inferred
|
||||
|
||||
- Ability sockets after the fix: Vortex 8dmg/6range/420cd · Blink 20range/1cd · Hook&Pull 15/25/120 · Light Zone 6/5/480.
|
||||
- RPC leak reproduced *before* the fix (one `ReadyToggleRequest` in DevSandbox → pending count 0→1 permanently, with
|
||||
the exact `MaxRpcAgeFrames` warning), and the reaper proven *after* (planted unconsumed request gone in frames).
|
||||
- Server 59.6 ticks/s against 60 Hz; the tick-batching warnings are transient at subscene stream, not standing.
|
||||
|
||||
## New gotchas banked
|
||||
|
||||
- **A socket whose SparkId is missing from the baked `AbilityDatabase` silently reads Damage/Range/Cooldown 0.** No
|
||||
error, no warning — the HUD even renders the slot as ready. Every gameplay subscene needs the full Spark set.
|
||||
- **Netcode's stale-RPC warning `Consume()`s but never destroys, and is `#if UNITY_EDITOR`-gated** — so an unhandled
|
||||
RPC is a *permanent entity leak*, and it is worst in a player build where the warning does not exist.
|
||||
- **`script_apply_edits` multi-line regex anchors do not match reliably**, and its structured router can silently
|
||||
truncate a line-range replacement. Single-line anchors are solid; for multi-line spans use `apply_text_edits` with
|
||||
`precondition_sha256` and re-read the result. Twice today a "successful" edit left the file half-changed.
|
||||
- **Removing `com.unity.ai.assistant`/`ai.inference` from the manifest crashed two AssetImportWorkers** (half the AI
|
||||
Toolkit stays resolved in `Library/PackageCache`). Restored; not worth it for editor-only tooling.
|
||||
|
||||
## Still open — needs the operator
|
||||
|
||||
1. **Revoke the PAT** at github.com/settings/tokens. I removed it from the remote URL; revocation is the step that
|
||||
actually matters, and only you can do it.
|
||||
2. **A0 style-proof sign-off** (~20 min in ArtStaging: flicker-cadence, and "this game and no other game").
|
||||
3. **Phase-1 fun gate** — now actually runnable: the kit works in the shipping scene for the first time.
|
||||
4. **GitHub mirror** is 235 commits / 8 weeks stale. Before pushing, check that repo's visibility — it tracks
|
||||
licensed Synty/Rukhanka content.
|
||||
5. **Art decisions I deliberately did not make**: `MakeMat`'s per-pack Synty atlas vs the A0 palette keystone; the
|
||||
poly budget (Player 10,178 tris vs 6k, Grindylow 4,330 vs 3k); stripping the 16-19 disabled Synty SMRs per
|
||||
character prefab. All three change how things look — your call, not a mechanical fix.
|
||||
|
||||
**Next:** [[World_Model_Build_Spec]] steps 1-5 (re-anchor first — its step 1 assumes a SaveData version DR-051
|
||||
already shipped past, and its RegionTag→PocketTag line anchors have moved).
|
||||
|
||||
## Related
|
||||
|
||||
[[DR-054_Audit_Purge_2026-08]] · [[DR-053_Engine_Fork_Bevy_Parked]] · [[Roadmap_Lantern_Slice]] ·
|
||||
[[CLAUDE_Build_Gotchas_Archive]]
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-014
|
||||
title: M6 Stage 3/4 — generic build/structure foundation (automation-ready) + turret + ability tiers + goal; persistence deferred
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-054
|
||||
date: 2026-06-03
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-015
|
||||
title: The Awakening Engine — fiction reconciliation (Aether unifier + Sleeper/Echo/THEM spine), skin-only
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
date: 2026-06-03
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-020
|
||||
title: M7 Automation — server-only deterministic production chains (Harvester → Conveyor → Fabricator) + SaveData v2 structure persistence
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-051
|
||||
date: 2026-06-05
|
||||
tags:
|
||||
- decision
|
||||
|
||||
+4
-3
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-026
|
||||
title: Inventory · Equipment · Progression foundation — data-driven ItemDatabase catalog + per-player replicated inventory, gear-tier progression, weapon-granted abilities (Phase 0 backbone)
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-054
|
||||
date: 2026-06-08
|
||||
tags:
|
||||
- decision
|
||||
@@ -128,8 +129,8 @@ the HUD panel rendered the 4 carried items with names from the catalog — inclu
|
||||
|
||||
## Links
|
||||
|
||||
[[DR-004_Data_Driven_Abilities_Modifiers]] (StatModifier machinery reused for equipment) ·
|
||||
[[DR-008_M5_HomeBase_BaseLayer]] (StorageEntry / RPC storage pattern) ·
|
||||
[[DR-004_M3_DataDriven_Abilities_Modifiers]] (StatModifier machinery reused for equipment) ·
|
||||
[[DR-008_M5_HomeBase_BaseLayer_Storage]] (StorageEntry / RPC storage pattern) ·
|
||||
[[DR-014_M6_Build_Structures_Automation_Foundation]] (data-driven catalog pattern) ·
|
||||
[[DR-018_World_Space_Cohesion_Pass]] (harvest sweep this reroutes) ·
|
||||
[[DR-020_M7_Automation_Production_Chains]] (server-only economy, Fabricator) ·
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-027
|
||||
title: Equipment slots (Phase 1) — weapon-granted swappable abilities + gear stat mods via the existing AbilityRef/StatModifier machinery, event-driven server-only equip
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-054
|
||||
date: 2026-06-08
|
||||
tags:
|
||||
- decision
|
||||
@@ -94,5 +95,5 @@ click-wires equippable rows. Shippable.
|
||||
|
||||
## Links
|
||||
|
||||
[[DR-026_Inventory_Equipment_Progression_Foundation]] (Phase 0) · [[DR-004_Data_Driven_Abilities_Modifiers]]
|
||||
[[DR-026_Inventory_Equipment_Progression_Foundation]] (Phase 0) · [[DR-004_M3_DataDriven_Abilities_Modifiers]]
|
||||
(StatModifier) · [[DR-016_Stage_G_Combat_Gameplay]] (TimedModifier strip helper reused).
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-034
|
||||
title: END-1 — a losable Engine Core (soft-loss base-integrity meter)
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-051
|
||||
date: 2026-06-12
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-036
|
||||
title: END-2 — the final siege + a latching win/lose (SL-3)
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-051
|
||||
date: 2026-06-13
|
||||
tags:
|
||||
- decision
|
||||
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-037
|
||||
title: Procedural Expedition Spine + Two Classes + Persistent Meta (Mission-as-Sortie redirect)
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
date: 2026-06-17
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-042
|
||||
title: Game-Loop Re-shape — Expedition-Driven Progression (retire the base-siege win)
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
date: 2026-06-24
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
id: DR-043
|
||||
title: First-Run Onboarding — contextual coach-marks + replayable How-to-Play card
|
||||
status: accepted
|
||||
status: superseded
|
||||
superseded_by: DR-051
|
||||
date: 2026-06-28
|
||||
tags:
|
||||
- decision
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
id: DR-044
|
||||
title: Expedition Redesign SHIPPED (steps 1–14) + Demo-Readiness Polish Pass
|
||||
date: 2026-07-04
|
||||
status: locked
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
tags:
|
||||
- decision
|
||||
- expedition
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
id: DR-045
|
||||
title: Combat Demo-Readiness Pass — Real Boss Fight, Readable-but-Fair Threat, 2-Run Demo
|
||||
date: 2026-07-04
|
||||
status: locked
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
tags:
|
||||
- decision
|
||||
- combat
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
id: DR-046
|
||||
title: Base↔Expedition Ties — Portal-Gated Rooms, Class-at-Base, Per-Run Prep Spend
|
||||
date: 2026-07-04
|
||||
status: locked
|
||||
status: superseded
|
||||
superseded_by: DR-048
|
||||
tags:
|
||||
- decision
|
||||
- combat
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: DR-053 — The engine fork (Bevy) is PARKED, not adopted; Unity stays the direction
|
||||
date: 2026-08-07
|
||||
status: accepted
|
||||
tags: [decision, engine, bevy, unity, direction, lantern]
|
||||
---
|
||||
|
||||
# DR-053 — Engine fork: PARKED
|
||||
|
||||
## Context
|
||||
|
||||
Between 2026-07-26 and 07-28 the project produced [[Lantern_Bevy_Greenfield_Guide]] — a 357-line architecture map
|
||||
for rebuilding LANTERN on Rust/Bevy/Avian/lightyear. Then nothing was committed for nine days. The 2026-08-06 audit
|
||||
found the reason this mattered was not the fork itself but where it lived:
|
||||
|
||||
- `grep -ril bevy Docs/Vault` returned **exactly one file — the guide itself**. Zero inbound wikilinks. No mention
|
||||
in CLAUDE.md, the roadmap, any DR, or any session log.
|
||||
- The gating instruction ("surface this BEFORE any Unity world code") existed **only in machine-local
|
||||
`memory/MEMORY.md`**, which CLAUDE.md explicitly forbids as the sole home of a decision: *"durable truth → the
|
||||
vault or this file (both committed); native `memory/` is local-only."*
|
||||
- The last three commits had no session log either, breaking the protocol's bookend rule.
|
||||
|
||||
So the single most consequential open question in the project was unreachable from any committed authority doc. On
|
||||
a second machine, or after a memory reset, Phase-2 world code would have started without the fork ever being raised.
|
||||
|
||||
## Decision
|
||||
|
||||
**Unity remains the direction. The Bevy fork is PARKED — recorded, linked, and re-openable — not adopted and not
|
||||
discarded.** The operator confirmed this on 2026-08-07 ("Unity is the direction") when the audit forced the choice,
|
||||
which is what unblocked the remediation work.
|
||||
|
||||
This DR is the committed home the guide never had. CLAUDE.md's direction bullet now links here.
|
||||
|
||||
## Rationale
|
||||
|
||||
The audit's diagnosis, kept because it is the part worth re-reading if the fork reopens:
|
||||
|
||||
Roughly **half** the friction the guide cites is genuinely Unity-attributable and would really go away —
|
||||
`NetCodeTestWorld` being internal (so no in-process netcode tests), system-ordering cycles that are invisible to
|
||||
EditMode tests and only throw at Play world-creation, Burst ICEs corrupting the incremental cache, and Rukhanka
|
||||
exposing no runtime bone transforms (so attachments are rigid-skinned vertex surgery).
|
||||
|
||||
The **other half** — two operator gates open three weeks, three direction pivots in nine weeks, no CI, no player
|
||||
build in two months — is process and bandwidth. It travels with you. The guide itself rates *"no editor for the
|
||||
operator — eyes-on art/feel loop degrades"* as **High**, and that is precisely the loop the two open gates need.
|
||||
|
||||
The guide's risk ledger also omits the project's own base rate of direction change, which is the largest single
|
||||
cost driver in its history.
|
||||
|
||||
## Consequences
|
||||
|
||||
- The guide stays as a **spike reference**, not a plan. Its `status` line already says so; it is now reachable.
|
||||
- **If the fork reopens, the entry condition is: close the two open Unity gates first** (A0 style-proof sign-off,
|
||||
Phase-1 fun gate). Otherwise the comparison is against a Unity build nobody has judged.
|
||||
- Four remediation items were deliberately *not* deferred on fork grounds because they are cheap and correct either
|
||||
way: the `EmissiveGloam` DOTS pragmas, the `EnemyRigTools` repair, the dead-material sweep, the vendor-pack
|
||||
reclaim. Anything larger and Unity-specific (a palette-keystone migration, a decimate pass) waits.
|
||||
- §1 of the guide — the tuning tables, the rollback/tick/swept-hit/one-press rules — is engine-agnostic and is the
|
||||
most expensive-to-rediscover thing the project owns. It should be maintained regardless.
|
||||
|
||||
## Related
|
||||
|
||||
[[Lantern_Bevy_Greenfield_Guide]] · [[DR-048_Lantern_Adoption_Full_Pivot]] · [[DR-054_Audit_Purge_2026-08]] ·
|
||||
[[Roadmap_Lantern_Slice]] · [[World_Model_Build_Spec]]
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
title: DR-054 — Delete the superseded base/expedition shell (2026-08 audit remediation)
|
||||
date: 2026-08-07
|
||||
status: accepted
|
||||
tags: [decision, purge, lantern, audit, direction]
|
||||
---
|
||||
|
||||
# DR-054 — The audit purge: delete rather than freeze
|
||||
|
||||
## Context
|
||||
|
||||
The 2026-08-06 full-stack audit (8 dimensions, adversarially verified, plus live Play-mode verification) found that
|
||||
the LANTERN pivot — locked 2026-07-13 — had reached the design docs and the combat internals and **almost nothing a
|
||||
player touches**:
|
||||
|
||||
- `Game.unity` (build index 1) was still the co-op-Hades expedition game: *AT BASE — build defenses, buy upgrades,
|
||||
READY UP to launch*, a meta shop, a prep loadout, `Tab BUILD`, Warrior/Ranger.
|
||||
- The menu said **"PROJECT M — Frontier colony — co-op"**: the Awakening-Engine tagline, two directions stale.
|
||||
- **All four ability sockets in the shipping scene were dead** — live server read: `Damage=0 Range=0 Cooldown=0`.
|
||||
The 5 LANTERN Sparks had been added to `GymSub.unity` and never to `Gameplay.unity`. Melee and dash were the only
|
||||
working combat verbs in the built game.
|
||||
- Enemy variety was **structurally inert**: Charger/Spitter/Swarmer authoring was on ZERO prefabs, so ~272 lines of
|
||||
Bursted AI, `BossAISystem`, and the whole wave-escalation curve could not match a chunk — while 734 lines of green
|
||||
tests certified them.
|
||||
- ~8,300 of 33,100 runtime lines were live code for the abandoned direction; 143 of 335 files were untouched since
|
||||
the pivot.
|
||||
|
||||
## Decision
|
||||
|
||||
Operator call, 2026-08-07: **"Delete/Remove as well — everything is saved in source control if needed. I want the
|
||||
project to be clean."** Deletion over freezing.
|
||||
|
||||
Deleted: the run/room lifecycle FSM, meta shop, prep loadout, boons (including `KillRewardSystem` and
|
||||
`DashTrailDamageSystem`, which existed only to serve boon flags), build palette + structures, shared storage,
|
||||
inventory/equipment, route/portal, ready-check, onboarding remnants, the enemy variants and the boss — code,
|
||||
authoring, HUD panels, subscene objects, prefabs and tests. ~140 source files; Scripts 335→233, Tests 77→47.
|
||||
|
||||
## What was deliberately KEPT
|
||||
|
||||
Four things sat in the delete set until their consumers were checked, and three of them turned out to be
|
||||
load-bearing. This is the part worth remembering: **the file-level manifest was wrong about them.**
|
||||
|
||||
- **`BaseGridMath` + `BaseAnchor`** — eight surviving systems call `PlotCenter` for spawn rings, respawn and
|
||||
dynamic light.
|
||||
- **`StorageEntry` + `StorageMath`** — these *are* the resource ledger, not base-storage.
|
||||
- **The save system** and **region/relevancy** (becomes PocketTag in Phase 2).
|
||||
|
||||
## Consequences
|
||||
|
||||
- The shipping scene is now the LANTERN gym: melee + dash + four **working** Sparks in seabed murk, with waves.
|
||||
There is no run structure — which is exactly what Phase 1 specifies ("no world, no lanterns — a gym").
|
||||
- `FrameKind` is Bathynaut/Harpooner; `PlayerClass` is gone (audit M5 — it was a second server-only copy of the byte
|
||||
`FrameId` already replicates, existing only so the meta shop could key on it).
|
||||
- Save files stay v7-loadable: `SaveData` keeps its structure/meta fields and writes them empty.
|
||||
- **Retired byte values stay reserved** as always (`StructureType` 1-4, `TuningKnob` 20-23, `DebugOp` 3/10/11) — now
|
||||
pinned by a test, not just a convention.
|
||||
- Test count 430 → 304. The drop is honest: 29 test files went with the subsystems they certified, and several of
|
||||
those were the false-confidence cases the audit named.
|
||||
|
||||
## Also fixed in the same pass
|
||||
|
||||
RPC leak (a terminal reaper — receivers gated on `RequireForUpdate` never ran in a scene missing the singleton, and
|
||||
Netcode's own warning consumes but never destroys, and is compiled out of player builds); two systems timing
|
||||
INTERPOLATED ghosts against the PREDICTED tick; `EmissiveGloam` missing DOTS instancing on a baked ghost;
|
||||
`EnemyRigTools` dead at every entry point; 8.5 GB of unreachable vendor content.
|
||||
|
||||
## Related
|
||||
|
||||
[[DR-051_Lantern_Realignment_Purge]] (the first purge) · [[DR-048_Lantern_Adoption_Full_Pivot]] ·
|
||||
[[DR-053_Engine_Fork_Bevy_Parked]] · [[Lantern_Strip_Mothball_Inventory]] · [[Roadmap_Lantern_Slice]]
|
||||
@@ -502,3 +502,13 @@ Condensed from CLAUDE.md 07-16; the inline bullets keep the operational core, ve
|
||||
4. Hand-written Rukhanka deformation shader: `UNITY_DOTS_INSTANCING_START` block with `_DeformedMeshIndex` must precede the `ComputeDeformedVertex.hlsl` include (macro expands at include time; else "undeclared identifier `_DeformedMeshIndex_DOTSInstancingOverrideMode`" in the DOTS_INSTANCING_ON variant = magenta), and `_DeformedMeshIndex` must also exist in the Properties block (SkinnedMeshBaker validates `material.HasProperty`).
|
||||
5. Synty variant containers hold both genders' heads — graft by exact name, purge wrong-variant children for idempotency.
|
||||
6. `manage_asset rename` half-failed (moved the asset to `Assets/` root, extensionless, while reporting an error) — verify on disk; plain file copy + `refresh_unity force` is the reliable fallback.
|
||||
|
||||
## 2026-08-07 — condensation to pay for the audit-purge edits (CLAUDE.md net-zero rule)
|
||||
|
||||
Moved out of CLAUDE.md verbatim to buy budget for the 2026-08-06 audit corrections (world-gate, asmdef table,
|
||||
per-machine setup, the H2 socket/AbilityDatabase rule). Both are art-pipeline long-form and are also carried by
|
||||
the `/art-dev` cookbook; CLAUDE.md keeps a one-line pointer.
|
||||
|
||||
- **★ Skinned ATTACHMENTS onto an existing rig (07-16 suit-kit recipe):** Blender rigid-skin (vgroup w=1 + armature modifier; **UNHIDE the armature before selection-export or the FBX is silently skinless**) → `PlayerRigTools.GraftSmr` REBASES on rebind (verts→rest-world; bindposes = inverse of **rigid scale-stripped** rest matrices — a Blender roundtrip imports cm bones/0.01 armature, raw bindpose reuse explodes ×100; **`RecalculateTangents()` or Rukhanka/BRG registration fails and the whole rig vanishes**). Hand-written deformation shaders: DOTS-instanced `_DeformedMeshIndex` block **BEFORE** the `ComputeDeformedVertex.hlsl` include + the property ALSO in the Properties block (the baker validates `HasProperty`). [[DR-052_SoD_Facing_Underwater_Feel]].
|
||||
|
||||
- **The rig pipeline is HUMANOID** (muscle clips retarget onto player + monster rigs; the old "Generic" note was WRONG). **Blender clips:** per-action FBX (Key All Bones + Force Start/End + FBX Units Scale; **5.1: +NLA-strips OFF or ZERO takes bake, silently**); import `CreateFromThisModel` (**CopyFromOther FAILS on Blender's extra `Armature` node**); bake root motion into pose. Optimize Game Objects **OFF**; root motion **OFF** (CC owns the transform).
|
||||
|
||||
Reference in New Issue
Block a user