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>
This commit is contained in:
Erik 2026-07-25 17:00:50 +02:00
parent 068a06518d
commit 9f37d17936
2 changed files with 118 additions and 1 deletions

View file

@ -3,7 +3,7 @@
**Status:** I0-I5 COMPLETE - retail oracle, zero-allocation transition
scratch, deterministic immutable collision records, complete prepared
package, exact flat traversal, dual publication, and connected shadow gate;
I6 active
I6 production cutover committed; visual/correctness acceptance active
**Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice I
**Purpose:** remove parsed DAT object graphs and steady collision allocations
without changing one retail collision decision, float, comparison, or traversal
@ -272,6 +272,25 @@ Gate: trajectories and collision fixtures remain bit-identical, package-only
startup succeeds, and retained-memory accounting shows no parsed collision
DBObj graph after stable world reveal.
**Production cutover landed 2026-07-25 at
`068a06518dd710ca5e7f166754cbb7789ca1ed0f`.** Gameplay is now
flat-authoritative, package publication is strict, and the parsed graph runs
only as a sampled referee. The exact rollback for this cutover is:
```text
git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f
```
Do not revert I3I5 package/publication work. The pre-visual automated gate
passes 8,402 Release tests / 5 skips and a strict dense-Arwic connected run
with 46,309/46,309 exact graph-referee matches, zero mismatch/fault/artifact,
and graceful shutdown. Production-like uncapped dense Arwic (15,530 entities,
no automation oracle) sustained roughly 190200 FPS with stable CPU p50
~5.0 ms / p95 ~5.97.3 ms and GPU p95 ~2.1 ms. Evidence:
[`../research/2026-07-25-slice-i6-flat-production-cutover.md`](../research/2026-07-25-slice-i6-flat-production-cutover.md).
Parsed-graph removal remains gated on the user correctness/visual pass.
### I7 — allocation, soak, and documentation closeout
1. Measure capped and uncapped resolve allocation separately for player,

View file

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