From 3238f1fde45b5c27081995782e9d3a29419d53bc Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 13 Jun 2026 17:33:52 +0200 Subject: [PATCH] docs(G.3a): note CacheCellStruct's unconditional UCG CellGraph add is inert (#133) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Code-review follow-up: the hydration decouple's safety rests not only on CacheCellStruct self-gating its BSP cache, but on the fact that a geometry-less cell — though now added to the UCG CellGraph unconditionally — never enters the _cellStruct BSP dictionary membership/placement resolve through, so the player can never be rooted in one. Document that load-bearing invariant at the hoist. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/AcDream.App/Rendering/GameWindow.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index c96ad05f..290b70e9 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -5655,6 +5655,11 @@ public sealed class GameWindow : IDisposable // fall through floor) and the visibility node for any geometry-less // collision cell. CacheCellStruct self-gates on a null PhysicsBSP // (PhysicsDataCache), so this is safe for cells with no physics. + // Note CacheCellStruct DOES register every resolved cell into the UCG + // CellGraph unconditionally (before that BSP gate), so a geometry-less + // cell now enters the graph — but it never enters the _cellStruct BSP + // dictionary that membership/placement resolve through, so the player + // can never be rooted in such a cell. The added graph entry is inert. // // BuildLoadedCell uses the PHYSICS (unlifted) transform. The +0.02 m // render lift above is a DRAW concern (shell z-fighting vs terrain);