From 4cd9b6579da6ce40ca373c9dbfda78c4094c4ebf Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Thu, 9 Jul 2026 12:41:38 -0700 Subject: [PATCH] =?UTF-8?q?Docs:=202026-07-09=20session=20log=20=E2=80=94?= =?UTF-8?q?=20B4d=20tail=20settled=20+=20collision-fidelity=20grounding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- ...2026-07-09_B4d_Tail_Collision_Grounding.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Docs/Vault/07_Sessions/2026/2026-07-09_B4d_Tail_Collision_Grounding.md diff --git a/Docs/Vault/07_Sessions/2026/2026-07-09_B4d_Tail_Collision_Grounding.md b/Docs/Vault/07_Sessions/2026/2026-07-09_B4d_Tail_Collision_Grounding.md new file mode 100644 index 000000000..d8ce16b8c --- /dev/null +++ b/Docs/Vault/07_Sessions/2026/2026-07-09_B4d_Tail_Collision_Grounding.md @@ -0,0 +1,74 @@ +--- +title: 2026-07-09_B4d_Tail_Collision_Grounding +type: note +permalink: gamevault/07-sessions/2026/2026-07-09-b4d-tail-collision-grounding +--- + +# 2026-07-09 — B4d hygiene tail settled + Phase 1.5 collision-fidelity grounding + +**Driver:** operator ask — "continue with the next phase of work." Grounding HEAD found an UNCOMMITTED, +UNLOGGED working tree (20 files + new `Server/PlayerResolve.cs`) — the tail of the 07-08 hygiene +continuation that never got verified/committed (the [[verify-tree-against-session-log]] class, again). + +## Part A — uncommitted hygiene tail: verified, split, committed (`813c82942`) + +The tree held three strands; verification (466/466 EditMode on the final tree, console clean vs baseline, +live Play smoke with Burst on) split them: + +- **KEPT — `PlayerResolve.TryResolve`** (new `Server/PlayerResolve.cs`): single-sources the RPC + `SourceConnection` → `NetworkId` → conn→player-map resolve at the 3 byte-identical sites + (ClassSelectReceive / PrepPurchase / DebugCommandReceive). `EntityManager` reads keep it source-gen-safe + from Bursted receivers. The other ~7 resolve sites stay inline per the original B4 deferral (they sit + inside compound source-gen query conditions). +- **KEPT — `ecb.Dispose()` after `Playback`** in 9 Temp-ECB systems (explicit-lifetime hygiene). +- **REVERTED — `TuningConfig.GetOrDefault(ref state)`** (7 call sites + the helper): the Play smoke caught + Entities logging **"creates a query during OnUpdate. Please create queries in OnCreate"** per system per + world (Dash + MeleeCombo, both worlds) — `state.GetEntityQuery` inside `[BurstCompile]` OnUpdate is an + engine anti-pattern diagnostic even though the query is cached. The consumers' existing + `SystemAPI.TryGetSingleton(...) ? cfg : Defaults()` idiom is already source-gen-optimal + (query created at OnCreate by codegen, zero warnings). **The original B4 "deliberately deferred — + doesn't factor out of source-gen" judgment was CORRECT; do not re-attempt a runtime-query helper for + singleton reads in ISystems.** Files reverted via `git checkout` + `refresh_unity scope=scripts + mode=force compile=request` (external-write recompile rule held). + +Suite green (466 at the time) pre- and post-revert; only console residue = benign bridge noise + the known +unfocused-editor server tick-batching warnings. + +## Part B — Phase 1.5 stabilize #2 (collision fidelity): grounding complete, plan GATED + +Read-only audit of the collision surface (subscene YAML parse + live scene walk via `execute_code`): + +- **All Environment (layer 8) colliders are invisible primitive boxes in the Gameplay SUBSCENE**; all + visuals are classic GameObjects in **Game.unity** (BaseBiome/ExpeditionBiome) — two disconnected trees, + which is exactly how fidelity drifted. Inventory: `WorldColliders_BaseRing` 16 segs (13.46×5×1.5, r≈30) · + `WorldColliders_ExpeditionRing` + `_Slot1` 24 segs each (15.61×5×1.5, r≈52, ring centers X+1000/X+1500) · + `WorldColliders_Landmarks` 11 boxes · `WorldColliders_RoomCover` 8 boxes (uniform 4.2×3.2×4.2). +- **Cover rocks have DEDICATED visuals** (`CoverRock_S0_0`…): render bounds differ per instance from the + uniform box — e.g. `CoverRock_S0_3` visual 5.3×5.7 XZ vs box 4.2×4.2 (player clips into visible rock); + boxes are also axis-aligned vs rounded rocks (invisible corner walls). +- **Landmark mismatches are large in both directions:** Cabin visual 9.6×10.1 vs box 6×6 and Tent 6.4×6.4 + vs 4×4 (walk INTO the visible building); Well 1.9×2.0 vs 3×3 and Artefact 2.4×1.5 vs 3×3 (invisible + wall); Warpgate footprint 8.3×6.8 vs 8×2.5. +- **Missing colliders on solid props:** meadow-tree trunks at the base hub, the survey-camp wind-turbine + pole, sci-fi crates, satellite dish — all walk-through today (adjacent scope; gameplay-affecting for + enemy nav → presented as a fork, not auto-included). +- **Rings:** cliff visual pieces cluster r≈54–78 (AABB-inflated) vs collider ring r≈52 — needs per-segment + sampled fit, not a uniform radius bump. + +**Planned approach (awaiting gate):** new Editor tool `ColliderFitTools` (menu-driven, EnvArtTools style) — +temp MeshColliders on cliff/rock LOD0 visuals → sampled raycast fit per ring segment (inner face = innermost +visible rock surface) · convex `MeshCollider` from the actual `CoverRock_*` render mesh for the 8 cover +boxes · per-landmark fitted boxes from the named prop's render bounds (multi-box where needed: warpgate +base + rings) · optional missing-collider adds per the fork. Save subscene (expected re-bake; **no ghost / +RPC / ordering surface**). Validation ladder: baked `CollisionWorld` raycast sampling vs visual surface · +enemy backstop re-validation (spawned Husks near refit cover keep moving — the Depenetrate/tangent-slide +was tuned on the OLD shapes) · suite + operator feel pass. + +## Next-session intent + +Execute the collision-fidelity pass per the gate answer → lighting/atmosphere pass → art-look decision +gate (pixel filter ON/OFF side-by-sides). The B5 split-panels focused Play VISUAL smoke is still pending +operator eyes (unfocused editor can't drive it). + +Related: [[Iteration_2026-07_CoopHades]] · [[2026-07-07_Workflow_Consolidation]] · +[[2026-07-07_Expedition_Enemy_Stuck_Harvest_Feedback]]