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>
This commit is contained in:
Erik 2026-07-25 16:38:54 +02:00
parent f7ff9f4eea
commit d9446030e6
32 changed files with 2777 additions and 92 deletions

View file

@ -0,0 +1,91 @@
# 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.