acdream/docs/research/2026-07-25-slice-i6-flat-production-cutover.md
Erik 9f37d17936 docs(physics): record flat cutover rollback and evidence
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>
2026-07-25 17:00:50 +02:00

3.6 KiB
Raw Blame History

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 PhysicsDataCache through 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 190200 FPS;
  • CPU p50 about 5.0 ms;
  • CPU p95 about 5.97.3 ms;
  • GPU p95 about 2.1 ms;
  • update p95 about 1.41.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.