docs(G.3a): note CacheCellStruct's unconditional UCG CellGraph add is inert (#133)

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) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-13 17:33:52 +02:00
parent ab050a015f
commit 3238f1fde4

View file

@ -5655,6 +5655,11 @@ public sealed class GameWindow : IDisposable
// fall through floor) and the visibility node for any geometry-less // fall through floor) and the visibility node for any geometry-less
// collision cell. CacheCellStruct self-gates on a null PhysicsBSP // collision cell. CacheCellStruct self-gates on a null PhysicsBSP
// (PhysicsDataCache), so this is safe for cells with no physics. // (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 // BuildLoadedCell uses the PHYSICS (unlifted) transform. The +0.02 m
// render lift above is a DRAW concern (shell z-fighting vs terrain); // render lift above is a DRAW concern (shell z-fighting vs terrain);