Pin the exact I6 production-cutover revert command before visual acceptance, distinguish observer-heavy connected metrics from the production-like dense-Arwic run, and preserve the strict publication/referee evidence. Co-authored-by: Codex <codex@openai.com>
3.6 KiB
Slice I6 — flat production collision cutover
Result
Commit 068a06518dd710ca5e7f166754cbb7789ca1ed0f makes the immutable
prepared collision representation authoritative for gameplay. The parsed DAT
graph remains temporarily resident only as the automated differential referee.
Production now:
- creates its
PhysicsDataCachethrough the explicit production factory; - fails publication when a required prepared GfxObj, Setup, CellStruct, or EnvCell topology record is genuinely absent;
- accepts idempotent publication when that flat asset is already resident;
- returns flat results even when the graph referee disagrees;
- uses flat containment for the unified cell graph;
- uses flat polygon tables for nearest indoor floor lookup;
- derives live/static BSP shape bounds and camera diagnostics from flat data.
Graph-only cache construction remains an explicit test/tooling oracle seam until the post-acceptance deletion commit.
Exact rollback
git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f
Do not revert the I3 package schema, I4 traversal, or I5 dual-publication commits.
Automated conformance
- Release build: pass.
- Complete Release solution: 8,402 passed / 5 skipped.
- Warm flat traversal: 0 B.
- Reused resolver scratch across player, remote, projectile, camera, and grounded mover families: 0 B/resolve.
- Retained render hot-path allocation fixtures: pass.
- Flat-authoritative mismatch fixture proves the graph cannot change gameplay.
- Production publication fixtures prove missing prepared data fails and an already-resident prepared asset remains idempotent.
Connected strict-publication/referee gate
Evidence:
logs/connected-dense-town-20260725-165758.report.json.
- PASS with graceful authoritative logout and
WM_CLOSE. - Dense Arwic: 15,530 entities / 111 animated.
- Collision referee: 46,309 queries, 46,309 exact matches.
- Mismatches: 0.
- Referee faults: 0.
- Mismatch artifacts: 0.
- Stable cell residency: 292 graph / 292 flat during the referee window.
The first strict attempt correctly exposed an idempotency-contract defect:
LiveCollisionAssetPublisher passed null after finding the prepared asset
already resident, and the guard interpreted that as absent. The root fix makes
the cache distinguish “already published” from “not provided”; strict missing
package data still fails.
Production-like performance check
The normal connected gate intentionally enables the complete current-path render oracle and allocates about 10.8 MiB/frame in dense Arwic. It is a correctness observer, not a production performance measurement.
A separate Release run used the same dense-Arwic arrival and six-second camera turn with:
- uncapped rendering;
- no lifecycle artifact directory;
- no current-path render oracle;
- no collision referee;
- no runtime counter attachment.
Stable result:
- about 190–200 FPS;
- CPU p50 about 5.0 ms;
- CPU p95 about 5.9–7.3 ms;
- GPU p95 about 2.1 ms;
- update p95 about 1.4–1.8 ms;
- roughly 8% total-machine CPU;
- working set about 1.12 GiB;
- private bytes about 1.41 GiB;
- warm allocation about 84.6 KiB/frame in the dense scene.
The parsed graph is still resident in those memory figures. I6 graph removal must reduce that footprint and prove stable production graph counts are zero.
Acceptance boundary
The automated cutover gate is complete. Before deleting the referee and parsed graph, the user must verify outdoor/indoor movement, doors, ramps/stairs, jump/fall, camera-wall collision, object interaction, combat/projectiles, and portal/reconnect behavior on the cutover commit.