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

98 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```text
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.