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:
parent
068a06518d
commit
9f37d17936
2 changed files with 118 additions and 1 deletions
98
docs/research/2026-07-25-slice-i6-flat-production-cutover.md
Normal file
98
docs/research/2026-07-25-slice-i6-flat-production-cutover.md
Normal 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 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue