# Slice I5 — dual collision publication and connected shadow gate ## Outcome Slice I5 is complete. Production gameplay remains graph-authoritative for this checkpoint, but every streamed near-tier generation and every live DAT object now publishes the matching prepared flat collision representation. The sampled flat path runs from a complete cloned transition, compares exact state and float bits, and cannot alter the graph result used by gameplay. No visual, collision, movement, or retail algorithm changed in this slice. ## Ownership - `LandblockBuild` carries one immutable `LandblockCollisionBuild` containing sorted source IDs, flat GfxObj/Setup collision, flat CellStruct geometry, and per-EnvCell topology. - `LandblockBuildFactory` reads that closure from the existing `IPreparedCollisionSource` after the serialized DAT transaction. A missing or corrupt prepared record rejects the complete near-tier generation; a graph-only partial publication is forbidden. - `LandblockPhysicsPublisher` commits graph and flat views through one retained publication receipt. Cell and topology ownership is withdrawn on exact replacement, near-to-far demotion, full removal, and session teardown. - `LiveCollisionAssetPublisher` applies the same strict dual-publication rule to CreateObject, appearance, and local-player Setup paths. - `PhysicsDataCache` exposes typed graph/flat counts in canonical lifecycle snapshots. Landblock-scoped cell and topology catalogs retire together. ## Shadow referee `CollisionShadowVerifier` samples the production entry points while leaving the graph result authoritative. The flat query receives one retained, reset-complete clone of `ObjectInfo`, `SpherePath`, and `CollisionInfo`. Comparisons cover: - containment availability, point containment, sphere containment; - root bounding spheres and physics availability; - cell and GfxObj moving-collision results; - complete transition state, collision/contact state, sphere path, candidate ordering, walkable vertices, GUID lists, and exact IEEE-754 float bits. A mismatch or flat fault writes one deterministic JSON artifact. The disabled production path allocates zero managed bytes over 10,000 warmed queries. ## Automated evidence - Focused Core and App collision/publication suites pass. - Cancellation publishes neither representation. - Pending receipt to accepted publication, demotion, rehydration, same-location replacement, adjacent-landblock isolation, full removal, and session reset preserve exact ownership without duplication. - Release build: zero warnings and zero errors. - Complete solution: 8,396 passed / 5 skipped. ## Connected evidence Lifecycle/reconnect gate: - artifact: `logs/connected-world-gate-20260725-162020/report.json` - capped login, Aerlinthe, Rynthid, Facility Hub, Holtburg, Aerlinthe revisit, then a fresh uncapped reconnect process; - 12,730 sampled queries, 12,730 exact matches; - zero mismatches, zero flat faults, zero mismatch artifacts; - graph/flat cell counts equal at every stable checkpoint; - all publication, retirement, upload, and warmup backlogs converged to zero; - both processes disconnected gracefully with exit code 0. Nine-stop R6 route: - artifact: `logs/connected-r6-soak-20260725-162614.report.json` - Caul, Sawato, Rynthid, Aerlinthe, Sawato revisit, Holtburg, Caul revisit, Sawato plateau, and Caul plateau; - turn, forward/release, jump, combat-toggle, and movement-truth exercises; - 42,719 eligible queries, 1,334 sampled queries, 1,334 exact matches; - zero mismatches, zero flat faults, zero mismatch artifacts; - graph/flat cell counts equal at all nine stable checkpoints; - graceful client shutdown and zero gate failures. The run occurred under RDP/lock-screen conditions. It is accepted for deterministic correctness and lifetime evidence only; its absolute frame/GPU measurements are not a physical-display performance gate. ## Next Slice I6 flips canonical production traversal to the prepared flat representation in one bisectable commit. The graph remains a temporary automated referee for the initial cutover gate. The exact cutover commit and `git revert ` command must be recorded before correctness/visual acceptance, after which production graph retention can be removed.