Docs: workflow consolidation - CLAUDE.md game-state extraction (-2KB, invariants+DR pointers), validation-harness skill ref, docs-commit standing auth
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: 2026-07-07_Workflow_Consolidation
|
||||
type: note
|
||||
permalink: gamevault/07-sessions/2026/2026-07-07-workflow-consolidation
|
||||
---
|
||||
|
||||
# 2026-07-07 (session C) — Workflow consolidation: CLAUDE.md audit, extraction, validation harness
|
||||
|
||||
**Driver:** operator ask — "is CLAUDE.md appropriate and accurate? should any of it be separated into docs/skills?
|
||||
what should change to make you a better agent?" Plus: collision playtest finding scoped + logged.
|
||||
|
||||
## Collision todo (Phase 1.5 stabilize #2 — scoped)
|
||||
|
||||
Operator: **collision shapes don't match the visual meshes** (cover rocks etc.) — environment collider FIDELITY, not
|
||||
body-blocking or hit-reg. Logged on the roadmap with the fix direction (fit colliders to render meshes; verify in the
|
||||
baked subscene PhysicsWorld; re-validate the enemy stuck-fix backstop after shape changes).
|
||||
|
||||
## CLAUDE.md audit → findings → fixes (all applied)
|
||||
|
||||
- **1 false claim:** `CreateLocalWorld` "is internal" — reflect-checked installed netcode 6.5.0: **PUBLIC** now.
|
||||
- **3 stale "1.13.2" stamps** (pre-6.5-unification); `NetCodeTestWorld` re-checked (still effectively unavailable).
|
||||
- **1 dead path:** conventions pointed at `~/.claude/skills/dots-dev/` — the skill is in-repo only.
|
||||
- ctx7 netcode pin re-searched: **no 6.x docs set exists yet** — `1_10_api` stays, annotation refreshed.
|
||||
- **Systemic:** chronic budget saturation (39.9–40.2 KB all week; every gotcha cost a condensation pass). Root cause:
|
||||
~⅓ of the file was game-state narrative duplicating vault DRs.
|
||||
|
||||
## Operator decisions (4 locked)
|
||||
|
||||
1. **Full game-state extraction NOW** → done: PlacedStructure/EB-1/EB-2/END-1/END-2/M7/harvest/core-loop bullets
|
||||
condensed to invariants + DR pointers (originals verbatim in the gotchas archive, heading 2026-07-07c).
|
||||
**CLAUDE.md: 40,183 → 38,096 B** — ~2.9 KB headroom; the per-session condensation tax is gone.
|
||||
2. **`validation-harness.md` built** (`.claude/skills/dots-dev/references/`) — consolidates the formerly
|
||||
machine-local-only Play-driving lore (pause/sleep/focus rules, execute_code traps, the server-inject harness
|
||||
proven on NodeFeedbackSystem, headless-run failure modes, visual-verification limits) into the in-repo skill;
|
||||
referenced from SKILL.md Phase 6 + References. Closes a cross-machine-rule violation.
|
||||
3. **Standing docs-commit authorization** — vault/CLAUDE.md/skill-reference changes now auto-commit at session end
|
||||
as a `Docs:` group; code commits stay explicitly gated; never push. Recorded in SKILL.md non-negotiable #5 +
|
||||
native memory `docs-commits-standing-authorization`.
|
||||
4. **Pending tree committed**: `8baf98622` (WorldFeelConfig attribute fix) + `5a16acc56` (session-B docs).
|
||||
|
||||
## Also recommended to the operator (their side)
|
||||
|
||||
- **Playtest-notes drop file** (`07_Sessions/User Sessions/`, object + action + expected-vs-actual) — kills the
|
||||
scoping round-trip on feel feedback.
|
||||
- Editor focus during compile/Burst-heavy phases (reaffirmed); the DR-044 2-instance LAN smoke is still open.
|
||||
|
||||
## Housekeeping
|
||||
|
||||
MEMORY.md index de-bloated (two ~500-word narrative lines → true one-liners; detail stays in the memory files);
|
||||
the stale "scale LEG children" root-cause claim corrected in the redirect memory (real fix was the swallowed
|
||||
attribute — see [[2026-07-07_Phase15_NodeFeedback_Attribute_Swallow]]).
|
||||
|
||||
## Next-session intent
|
||||
|
||||
Phase 1.5 in earnest: collision-fidelity pass (stabilize #2, now scoped) → lighting/atmosphere pass → art-look
|
||||
decision gate (pixel filter ON/OFF side-by-sides). Operator eyeballs harvest feel on real nodes en route.
|
||||
|
||||
Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Phase15_NodeFeedback_Attribute_Swallow]]
|
||||
@@ -447,3 +447,19 @@ from the deleted samples tree) so the deformation-material rule is still self-co
|
||||
- Old maintenance-section sentence: "Design rationale already lives in the per-milestone DRs (`Docs/Vault/07_Sessions/_Decisions/DR-###`)."
|
||||
|
||||
**The incident behind the new gotcha:** the 2026-07-07 "Node* knobs" edit to `WorldFeelConfig.cs` (commit `cc2e7ad95`) replaced a span that included the `[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]` attribute above `ResetDefaults()`, leaving a bare zero-indent signature. Nothing else calls `ResetDefaults` → all statics stayed C# defaults (`Enabled=false`, `ChipBurstCount=0`) → the ENTIRE harvest/world-feedback slice (node shrink/pop, chip particles, SFX, camera micro-punch) was silently dead; the operator caught it in the Phase 1 gate playtest. Live diagnosis disproved the session-log's own PTM-on-root hypothesis first (the Model child is properly parented; root PTM 0.783 → child LTW 1.723 = 2.2×0.783, exact). Second edit-swallows-adjacent-line bug in two days (07-06 `_portalMat` comment-swallow NRE). Full write-up: `07_Sessions/2026/2026-07-07_Phase15_NodeFeedback_Attribute_Swallow.md`.
|
||||
|
||||
## 2026-07-07c — full game-state extraction (operator-ordered, workflow-consolidation session)
|
||||
|
||||
CLAUDE.md was chronically saturated (39.9–40.2 KB for a week; every gotcha addition cost a condensation pass). The operator ordered a FULL extraction of game-state narrative → one-line invariants + DR pointers. Original long-form bullets preserved here verbatim:
|
||||
|
||||
- **`PlacedStructure{[GhostField] byte Type; int2 Cell (server-only); uint NextTick; uint LastProcessedTick}`** on an ownerless interpolated ghost. **Bake the tick fields** (catch-up linchpin); only `Type` replicates (client derives `Cell`). **Occupancy is DERIVED** by scanning live ghosts into a Temp `NativeHashSet<int2>`, never baked. See [[DR-014_M6_Build_Structures_Automation_Foundation]].
|
||||
- **EB-1 machines can die ★ (DR-032):** structures bake `Health`(`[GhostField]`)+`DamageEvent`+`Destructible`; `HealthApplyDamageSystem` destroys a `Destructible` at 0 (occupancy auto-frees). `EnemyAISystem` fortress-targets weighted-nearest players+structures (`EnemyAIMath.PickWeightedNearest`; snapshot ABOVE the early-return; `StructureAggroWeight`<1 SQUARED). ★ a Health-less machine silently drops OUT of the aggro snapshot. See [[DR-032_EB1_Machines_Can_Die]].
|
||||
- **EB-2 felt spend ★ (DR-033):** turret ammo = shared `Charge`(`ResourceId` **4**) on the `[GhostField] StorageEntry` ledger; `TurretFireSystem` spends from the ONE `GetSingletonEntity<ResourceLedger>` (afford→fire+cooldown, else SOFT-FAIL, no cooldown-burn). `Fabricator.InputFromLedger` reads it LIVE in-loop (no hoist → machines split a finite pool). See [[DR-033_EB2_Felt_Spend_Charge_Economy]].
|
||||
- **END-1 losable Core ★ (DR-034):** `CoreIntegrity{[GhostField] int Current,Max; uint OverrunTick}` on the GLOBAL CycleDirector ghost; `CoreDamageSystem`/`CoreRestoreSystem` (server) drain near `PlotCenter`, regen ONLY in Calm. SOFT-loss edge IN `CyclePhaseSystem` (sole Phase writer): `Current<=0` in Siege → Calm (NO reward; transient `OverrunTick`, NOT latching). Core = `EnemyAISystem` FALLBACK target. SaveData **v4**. See [[DR-034_END1_Losable_Core]].
|
||||
- **END-2 win/lose ★ (DR-036):** server-only `RunPhase` (writer `GoalReachedSystem`) + **REPLICATED `RunOutcome{[GhostField] byte}`** (writer `CyclePhaseSystem`; do NOT client-derive the banner). `GoalReached` arms a final siege ×`FinalSiegeMultiplier` at `Charge>=Target` (once)+FinalDefense; latch Victory/Loss+halt; SiegeTimeout OFF in the final; SaveData **v5**. See [[DR-036_END2_Final_Siege_Win_Lose]].
|
||||
- **`GoalProgress{[GhostField] int Charge,Target}`** (the goal meter — ≠ EB-2 `ResourceId.Charge` ammo) rides the CycleDirector ghost. Resource-gated ability tiers/buffs reuse `StatModifier` (`StatRecomputeSystem`→`EffectiveAbilityStats`).
|
||||
- **M7 Automation (server-only) ★:** `Harvester`/`Conveyor` palette-TRIMMED (code intact), `Fabricator` LIVE (EB-2); catch-up `ProductionMath.CyclesDue` (**lower-bound 0**); `RuntimePlacedTag`=player-built. See [[DR-020_M7_Automation_Production_Chains]].
|
||||
- **Harvest routes by node region ★; inventory/equipment PAUSED:** in-run nodes→PERSONAL `InventorySlot` (`[GhostField] OwnerSendType.All`, spill→ledger); `G`=deposit at base (base nodes GONE — DR-044). Items/equip detail → gotchas archive (2026-06-12). See [[DR-026_Inventory_Equipment_Progression_Foundation]].
|
||||
- **Core loop = ready-check multi-room RUNS ★ (DR-044; DR-031/042 base-mining text archived 07-04):** base = pure SPEND hub (no base nodes; `Tuning.StartingOre` grubstake). `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 + every `BoonOffer` on exit; teleports ONLY launch-stamped **`RunParticipant`s** (released on Returning — dead-respawned re-conscript, late joiners stay home). Rooms spawn per `RoomEpoch` at ping-pong sub-slots, `RoomTag`-torn-down; first slot waits `Tuning.RoomEntryGraceTicks`. ★ a serialized prefab bool ignores the C# initializer — flip `CycleDirector.prefab`. **Demo (DR-045/046): `GoalProgress.Target`=2; `Health.Max` now `[GhostField]` (boss + enemy HP bars). Boss = scaled Charger + server-only `BossState` kit (sole `BossAISystem` mover: SLAM/phase-2 summon/knockback-immune). Grunt windup commits ~last 30%; Charger stagger + Spitter cornered-hold. Rooms gate on a PORTAL (`RunLifecycle.RoomExplore=6` loot window; `PortalInteractRequest`→server `PortalCommand`; empty expedition advances now); class picked + per-run PREP buffs spent at base each run (Staging-gated RPCs via the shared `ClassSwapUtil`; disjoint prep `StatModifier` band stripped on Returning).** See [[DR-044_Expedition_Redesign_Shipped_Demo_Polish]] · [[DR-045_Combat_Demo_Feel_Boss_Fight]] · [[DR-046_Base_Expedition_Ties_Portal_Class_Prep]].
|
||||
|
||||
Also this pass (earlier, same session): four stale netcode "1.13.2" stamps corrected to 6.5.0 (CreateLocalWorld is now PUBLIC — reflect-verified; NetCodeTestWorld still effectively unavailable), the dead `~/.claude/skills` path fixed to the in-repo skill, and the ctx7 netcode pin re-annotated (no 6.x docs set exists as of 07-07).
|
||||
|
||||
Reference in New Issue
Block a user