acdream/docs/research/2026-07-25-slice-i5-dual-collision-shadow.md
Erik d9446030e6 feat(streaming): shadow-publish flat collision assets
Carry one immutable prepared collision closure with each accepted near-tier generation and install graph plus flat views through the same retained publication receipt. Apply the same strict package-only rule to live entities, add exact sampled graph-authoritative comparison artifacts and lifecycle counters, and prove cancellation, demotion, rehydrate, revisit, teardown, reconnect, and the nine-stop route with 14,064 zero-mismatch samples.

Co-authored-by: OpenAI Codex <codex@openai.com>
2026-07-25 16:38:54 +02:00

4.2 KiB

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 <sha> command must be recorded before correctness/visual acceptance, after which production graph retention can be removed.