docs(physics): close Slice I evidence and roadmap

Record the accepted flat-authoritative collision cutover, production parsed-graph removal, exact rollbacks, zero-residency connected gates, and RDP measurement boundary. Reconcile architecture, milestones, roadmap, issue ledger, agent instructions, and the active Slice J handoff.

Validated by the existing zero-warning Release build, 8,413 passing Release tests with five pre-existing skips, 201 focused closeout tests, and both exact-binary connected routes.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-25 18:44:43 +02:00
parent 82f8d4f82e
commit afebbe3eca
11 changed files with 257 additions and 71 deletions

View file

@ -116,7 +116,7 @@ user-gated. Deterministic world-lifecycle automation protects fresh login,
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
Release builds; the current performance-program checkpoint passes
3,826 App tests / 3 skips and 8,335 complete-solution tests / 5 skips.
3,836 App tests / 3 skips and 8,413 complete-solution tests / 5 skips.
**M4 feature work order (paused while the authorized performance program
executes):** the six-slice pre-M4 world-interaction completion
@ -181,23 +181,24 @@ gates pass. The lifecycle/reconnect and nine-stop routes sampled 14,064 exact
queries with zero mismatch, fault, or artifact; graph/flat cell residency
matched at every stable checkpoint and teardown converged. Release build and
8,396 solution tests / 5 skips pass.
Slice I6 is committed at `068a0651`: gameplay collision is flat-authoritative
and the parsed graph is only a sampled referee. The strict dense-Arwic gate
matched 46,309/46,309 queries, and the exact physical nine-stop lifecycle soak
passed with all publication, retirement, upload, warmup, and class backlogs
converged. Parsed-graph deletion remains gated on the user's final
collision/visual acceptance. The cutover rollback is
`git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f`.
Slice I is complete. I6 made gameplay collision flat-authoritative at
`068a0651`; its strict dense-Arwic gate matched 46,309/46,309 queries and the
physical nine-stop soak converged. After user collision acceptance, I7 removed
every production parsed collision graph at `82f8d4f8`. Release build and 8,413
tests / 5 skips pass; both exact-binary connected routes report `0/0/0` parsed
graph residency at every stable checkpoint with graceful teardown. The
cutover rollback is
`git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f`; graph-removal rollback
is `git revert 82f8d4f82e24ad85042ac3e25c4f6464bebce758`.
Slice J0 is complete at `b632672e`: `AcDream.Runtime` now provides the enforced
presentation-independent assembly boundary without moving gameplay behavior.
Four dependency guards, the Release build, and 8,406 tests / 5 skips pass. J1
waits behind the I6/I7 user gate. Its rollback is
Four dependency guards pass. J1 is active. J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
passes. Slice I7 closeout is active from
passes. Slice I is closed in
`docs/plans/2026-07-25-modern-runtime-slice-i.md`; the coherent Slice J campaign
is pinned in `docs/plans/2026-07-25-modern-runtime-slice-j.md`. The exact G4 visual rollback
executes from `docs/plans/2026-07-25-modern-runtime-slice-j.md`. The exact G4 visual rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence:
`docs/research/2026-07-25-slice-h-closeout.md` and
@ -207,7 +208,8 @@ the portal-warmup corrections. Evidence:
`docs/research/2026-07-25-slice-i3-prepared-collision-package.md` and
`docs/research/2026-07-25-slice-i4-flat-bsp-differential.md` and
`docs/research/2026-07-25-slice-i5-dual-collision-shadow.md` and
`docs/research/2026-07-25-slice-i6-flat-production-cutover.md`.
`docs/research/2026-07-25-slice-i6-flat-production-cutover.md` and
`docs/research/2026-07-25-slice-i7-closeout.md`.
**Structural prerequisite before new M4 subsystem work:** all eight
behavior-preserving `GameWindow` decomposition slices and the automated
@ -228,7 +230,7 @@ uncapped Release presentation is smooth, while physics, collision, and wire
truth remain correct.
See `docs/plans/2026-07-22-gamewindow-slice-8-composition-lifecycle.md` and
`docs/architecture/code-structure.md`. **Carried:** #153, #116, remaining
R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice I+, and #225's
R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice J+, and #225's
lifestone/particle alpha visual gate.
Start structural work at `memory/project_gamewindow_decomposition.md` and

View file

@ -114,7 +114,7 @@ user-gated. Deterministic world-lifecycle automation protects fresh login,
outdoor/world-edge/dungeon travel, same-location revisit, exact graceful
disconnect, and uncapped fresh-process reconnect with JSON/PNG artifacts.
Release builds; the current performance-program checkpoint passes
3,826 App tests / 3 skips and 8,335 complete-solution tests / 5 skips.
3,836 App tests / 3 skips and 8,413 complete-solution tests / 5 skips.
**M4 feature work order (paused while the authorized performance program
executes):** the six-slice pre-M4 world-interaction completion
@ -179,23 +179,24 @@ gates pass. The lifecycle/reconnect and nine-stop routes sampled 14,064 exact
queries with zero mismatch, fault, or artifact; graph/flat cell residency
matched at every stable checkpoint and teardown converged. Release build and
8,396 solution tests / 5 skips pass.
Slice I6 is committed at `068a0651`: gameplay collision is flat-authoritative
and the parsed graph is only a sampled referee. The strict dense-Arwic gate
matched 46,309/46,309 queries, and the exact physical nine-stop lifecycle soak
passed with all publication, retirement, upload, warmup, and class backlogs
converged. Parsed-graph deletion remains gated on the user's final
collision/visual acceptance. The cutover rollback is
`git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f`.
Slice I is complete. I6 made gameplay collision flat-authoritative at
`068a0651`; its strict dense-Arwic gate matched 46,309/46,309 queries and the
physical nine-stop soak converged. After user collision acceptance, I7 removed
every production parsed collision graph at `82f8d4f8`. Release build and 8,413
tests / 5 skips pass; both exact-binary connected routes report `0/0/0` parsed
graph residency at every stable checkpoint with graceful teardown. The
cutover rollback is
`git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f`; graph-removal rollback
is `git revert 82f8d4f82e24ad85042ac3e25c4f6464bebce758`.
Slice J0 is complete at `b632672e`: `AcDream.Runtime` now provides the enforced
presentation-independent assembly boundary without moving gameplay behavior.
Four dependency guards, the Release build, and 8,406 tests / 5 skips pass. J1
waits behind the I6/I7 user gate. Its rollback is
Four dependency guards pass. J1 is active. J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
passes. Slice I7 closeout is active from
passes. Slice I is closed in
`docs/plans/2026-07-25-modern-runtime-slice-i.md`; the coherent Slice J campaign
is pinned in `docs/plans/2026-07-25-modern-runtime-slice-j.md`. The exact G4 visual rollback
executes from `docs/plans/2026-07-25-modern-runtime-slice-j.md`. The exact G4 visual rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence:
`docs/research/2026-07-25-slice-h-closeout.md` and
@ -205,7 +206,8 @@ the portal-warmup corrections. Evidence:
`docs/research/2026-07-25-slice-i3-prepared-collision-package.md` and
`docs/research/2026-07-25-slice-i4-flat-bsp-differential.md` and
`docs/research/2026-07-25-slice-i5-dual-collision-shadow.md` and
`docs/research/2026-07-25-slice-i6-flat-production-cutover.md`.
`docs/research/2026-07-25-slice-i6-flat-production-cutover.md` and
`docs/research/2026-07-25-slice-i7-closeout.md`.
**Structural prerequisite before new M4 subsystem work:** all eight
behavior-preserving `GameWindow` decomposition slices and the automated
@ -226,7 +228,7 @@ uncapped Release presentation is smooth, while physics, collision, and wire
truth remain correct.
See `docs/plans/2026-07-22-gamewindow-slice-8-composition-lifecycle.md` and
`docs/architecture/code-structure.md`. **Carried:** #153, #116, remaining
R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice I+, and #225's
R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice J+, and #225's
lifestone/particle alpha visual gate.
Start structural work at `memory/project_gamewindow_decomposition.md` and

View file

@ -59,6 +59,12 @@ What does NOT go here:
[`plans/2026-07-24-modern-runtime-slices-f-g-render-scene.md`](plans/2026-07-24-modern-runtime-slices-f-g-render-scene.md).
Evidence:
[`research/2026-07-24-slice-e-cost-budgeted-streaming-report.md`](research/2026-07-24-slice-e-cost-budgeted-streaming-report.md).
- **Modern Runtime execution:** Slices FI are complete. Slice I removed
production parsed collision graphs after exact flat differential and user
collision acceptance; 8,413 Release tests / 5 skips and both exact-binary
connected routes pass with `0/0/0` graph residency. J0's enforced
presentation-independent project boundary is live and J1 is active from
[`plans/2026-07-25-modern-runtime-slice-j.md`](plans/2026-07-25-modern-runtime-slice-j.md).
The [documentation map](README.md) defines how this tactical ledger relates to
the milestone, roadmap, architecture, divergence register, research, and

View file

@ -175,7 +175,7 @@ src/
TransitionTypes.cs -> SpherePath / CollisionInfo / transition helpers (active in L.2)
FlatCollisionAssets.cs -> immutable array/index collision schema (Slice I2)
FlatCollisionAssetBuilder.cs -> deterministic DAT graph preparation (Slice I2/I3)
PhysicsDataCache.cs -> GfxObj / Setup / CellStruct collision data (done, active)
PhysicsDataCache.cs -> flat prepared GfxObj / Setup / CellStruct / EnvCell collision owner
ShadowObjectRegistry.cs -> broadphase for nearby physics objects (active)
PhysicsEngine.cs -> ResolveWithTransition active player path
ProjectilePhysicsStepper.cs -> pure retail projectile integration + sweep
@ -204,7 +204,7 @@ src/
Messages/ -> done (CreateObject, MoveToState, etc.)
AcDream.Runtime/ presentation-independent client kernel boundary
RuntimeAssemblyMarker.cs -> J0 dependency boundary; owner moves start after I6/I7
RuntimeAssemblyMarker.cs -> J0 dependency boundary; J1 contracts active
-> may reference Core, Core.Net, Content, and Plugin.Abstractions only
-> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui
@ -406,7 +406,10 @@ What exists and is active:
- `TransitionTypes` carries `SpherePath`, `CollisionInfo`, `ObjectInfo`,
transition validation, step-up/down, contact-plane handling, and partial
slide behavior.
- `PhysicsDataCache` loads GfxObj, Setup, and CellStruct physics data from DATs.
- `PhysicsDataCache` owns immutable flat GfxObj, Setup, CellStruct, and EnvCell
collision assets loaded from the validated prepared package. Production
retains no parsed DAT collision graph; graph construction is restricted to
bake/equivalence tools and explicit test oracles.
- `ShadowObjectRegistry` gives movement a broadphase over nearby objects and
buildings.
- `TerrainSurface` uses triangle-aware terrain contact; older "bilinear terrain

View file

@ -140,8 +140,8 @@ strict little-endian codec and `IPreparedCollisionSource`.
`PakPreparedAssetSource` implements the render and collision interfaces over
one mmap; it does not create a second DAT reader or mapping. CellStruct
payloads alias only after exact serialized-byte comparison, while each
EnvCell topology remains independently keyed. Production traversal is still
the parsed graph oracle until Slice I6. Full-catalog evidence:
EnvCell topology remains independently keyed. Production traversal remained
on the parsed graph oracle until the later Slice-I cutover. Full-catalog evidence:
`docs/research/2026-07-25-slice-i3-prepared-collision-package.md`.
**Slice I5 dual-publication seam (2026-07-25).** Near-tier
@ -155,6 +155,19 @@ fault. This is still one `DatCollection` and one prepared-package mmap, not a
second reader or a WorldBuilder runtime dependency. Evidence:
`docs/research/2026-07-25-slice-i5-dual-collision-shadow.md`.
**Slice I6/I7 flat-authoritative closeout (2026-07-25).** Production
`PhysicsDataCache` now publishes only immutable flat GfxObj, Setup,
CellStruct, and EnvCell-topology records from the validated package. Stable
world state strips temporary `PhysicsDatBundle` source material, and near
landblock builds discard raw Environment/GfxObj collision graphs once the
flat closure exists. Parsed graph constructors remain explicit
test/bake/equivalence oracles only; gameplay has no graph fallback or referee.
Both exact-binary connected routes report `0/0/0` retained parsed collision
graphs at every stable checkpoint while flat residency remains populated.
This remains one `DatCollection`, one preparation algorithm, and one package
mmap. Evidence:
`docs/research/2026-07-25-slice-i7-closeout.md`.
**Retail VFX hook compatibility seam (2026-07-14).** Chorizite.DatReaderWriter
2.1.7 models `CreateBlockingParticleHook` as the common hook header only, while
retail inherits the complete `CreateParticleHook` payload. The narrow readers in

View file

@ -1666,20 +1666,22 @@ port in any phase — no separate listing here.
> ownership. Lifecycle/reconnect plus the nine-stop route sampled 14,064
> queries with exact state/float-bit equality, zero mismatch/fault/artifact,
> equal graph/flat cell residency, and graceful teardown. Release build and
> 8,396 solution tests / 5 skips pass. I6 production cutover is committed:
> gameplay is flat-authoritative, dense Arwic matched 46,309/46,309 referee
> queries, and the physical nine-stop soak converged. Parsed-graph deletion
> waits on the user's collision/visual acceptance. J0 established the
> presentation-independent Runtime boundary with four enforced dependency
> guards; Release build and 8,406 tests / 5 skips pass.
> 8,396 solution tests / 5 skips pass. I6 made gameplay flat-authoritative:
> dense Arwic matched 46,309/46,309 referee queries and the physical nine-stop
> soak converged. Following user collision acceptance, `82f8d4f8` removed
> every production parsed collision graph. I7 passes 8,413 Release tests / 5
> skips plus both exact-binary connected routes; every stable checkpoint
> reports `0/0/0` graph residency while flat assets remain populated. J0
> established the presentation-independent Runtime boundary with four enforced
> dependency guards; J1 is now active.
> The historical exact cutover
> rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:
> retained UI/frame work, exact bounded light selection, and
> pooled/borrowed/direct network I/O pass 8,292 Release tests / 5 skips and the
> connected lifecycle/reconnect gate. Slice I7 closeout remains active from
> [its detailed plan](2026-07-25-modern-runtime-slice-i.md); Slice J is pinned
> in [its lifetime-group plan](2026-07-25-modern-runtime-slice-j.md).
> connected lifecycle/reconnect gate. Slice I is closed in
> [its detailed plan](2026-07-25-modern-runtime-slice-i.md); Slice J1 executes
> from [its lifetime-group plan](2026-07-25-modern-runtime-slice-j.md).
**Spec:** `docs/superpowers/specs/2026-07-05-modern-pipeline-design.md` (the
umbrella design — read it first). **Goal:** smoothness first (no frame over
@ -1703,11 +1705,11 @@ hitch and follows.
| MP1a | `AcDream.Content` extraction (GL-free MeshExtractor + boundary records out of App) | ✅ SHIPPED 2026-07-05 — user-gated (renders identical, zero tripwires, perf-neutral); 8 commits `651d041e`..`b0758d77` |
| MP1b | Pak format + `acdream-bake` CLI + mmap `PakReader` + equivalence/full-scale gate | ✅ **SHIPPED 2026-07-24** — 729,888 EnvCell keys → 17,117 unique geometries + 712,771 aliases (42.6×), 751,141 total keys / 38,370 physical blobs, zero failures, 28,192.4 MiB, 81.4 s validated atomic publish; full-DAT gate also corrected a real collision in WB's legacy geometry hash. [Report](../research/2026-07-24-slice-b-full-bake-report.md) |
| **MP-Alloc (safe batch)** | Reuse per-frame buffers: anim pose, particle draw-list, interior partition, animatedIds/drawableCells sets | ✅ SHIPPED + USER-GATED 2026-07-05 — dense-town frame-time spikes 2087ms → 610ms, alloc spikes (3075MB single-frame) eliminated, gen2 GC 511/window → ~0; user confirms FPS steady. 4 commits `b8c05e2b`..`91afea24` |
| MP-Alloc (hard sites) | EnvCell settled-camera rebuild gate + physics `Transition` reuse | 🟡 Physics cutover SHIPPED 2026-07-25 — retail-shaped reset-complete transition/query scratch is bit-identical and 0 B/resolve across five profiles; immutable flat collision storage, deterministic package, zero-allocation traversal, strict dual publication, and flat-authoritative production traversal are shipped. Parsed-graph deletion awaits the user collision/visual gate. |
| MP-Alloc (hard sites) | EnvCell settled-camera rebuild gate + physics `Transition` reuse | SHIPPED 2026-07-25 — retail-shaped reset-complete transition/query scratch is bit-identical and 0 B/resolve across five profiles; immutable flat collision storage, deterministic package, zero-allocation traversal, strict publication, flat-authoritative production traversal, and parsed-graph removal pass automated and connected acceptance. |
| MP1c | Streaming cutover to pak + hitch gate | ✅ **SHIPPED 2026-07-24** — typed package-only production source, explicit Setup probes, non-allocating Portal-first lookup, exact translucency metadata, and ordered teardown; capped/uncapped/dense physical routes + user visual gate pass. Uncapped CPU p99 7.825→6.496 ms, GPU p99 3.406→2.706 ms, portal frame max 202.9→39.9 MiB, process allocation 41.8%, zero invalid Setup probes. [Report](../research/2026-07-24-slice-c-prepared-asset-cutover-report.md) |
| MP2 | Retail particle distance/cell-view degradation: DAT-authored range, exact infinite/finite off-view update branches, emitter-first render scan, user-requested 2× default range | ✅ SHIPPED 2026-07-17 — Aerlinthe hotspot `0x32000223` resolves to retail 64m and defaults to 128m; landscape/entity streaming distance unchanged |
| MP3 | Arch ECS render world + delta submission (the 300-FPS lever) | ⚪ — note: does NOT fix the steady-state GC churn (that's MP-Alloc); MP3 is the draw-submission throughput lever |
| MP4 | Zero-alloc frame loop + flat physics data (residual, post-MP-Alloc) | 🟡 ACCEPTANCE — Slices I1I6 shipped through flat-authoritative production traversal; dense-Arwic and physical nine-stop gates pass. User collision/visual acceptance gates parsed-graph deletion and I7 closeout. |
| MP4 | Zero-alloc frame loop + flat physics data (residual, post-MP-Alloc) | **SHIPPED 2026-07-25** — Slice I complete: 8,413 Release tests / 5 skips, 0 B/resolve across five profiles, zero retained parsed collision graphs, exact-binary lifecycle/reconnect and nine-stop routes pass, and user collision acceptance is recorded. |
| MP5 | Job-system parallelism | ⚪ stretch, evidence-gated |
---

View file

@ -141,16 +141,17 @@ queries with zero mismatch, fault, or artifact; graph/flat cell residency
matched at every stable checkpoint and teardown converged. Release build and
8,396 solution tests / 5 skips pass. Slice H is complete: retained UI/frame
work, exact bounded light selection, and pooled/borrowed/direct network I/O
pass. Slice I6 is committed: gameplay is flat-authoritative, its dense-Arwic
referee gate matched 46,309/46,309 queries, and the physical nine-stop soak
converged without publication, retirement, upload, or warmup backlog. Parsed
graph deletion remains gated on the user's collision/visual acceptance. Slice
J0 established and enforced the presentation-independent `AcDream.Runtime`
boundary without moving behavior; Release build and 8,406 tests / 5 skips
pass. Slice I7 closeout is active under
[`2026-07-25-modern-runtime-slice-i.md`](2026-07-25-modern-runtime-slice-i.md).
The coherent Slice J campaign is pinned in
pass. Slice I6 made gameplay flat-authoritative; its dense-Arwic referee gate
matched 46,309/46,309 queries and the physical nine-stop soak converged.
Following user collision acceptance, `82f8d4f8` removed every production
parsed collision graph. Slice I7 passes 8,413 Release tests / 5 skips and both
exact-binary connected lifecycle/reconnect and nine-stop routes; parsed graph
residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
is complete. Slice J0 established and enforced the presentation-independent
`AcDream.Runtime` boundary without moving behavior; J1 is active under
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
Slice-I closeout evidence is
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).
The historical exact G4 visual rollback remains
`git revert ef1d263337997bb030eadb7b8e71d73dc659907a`.

View file

@ -2,11 +2,11 @@
**Date:** 2026-07-24
**Status:** Slices AH are complete. Slice I6's flat-authoritative production
cutover is committed and awaits the final user collision/visual gate before
parsed-graph deletion. Slices FL were explicitly approved 2026-07-24. Slice
J0's dependency-boundary preparation is complete without moving gameplay
owners. J1 remains behind the I6/I7 user collision/visual closeout.
**Status:** Slices AI are complete. Flat-authoritative collision, zero-
allocation resolve scratch, parsed-graph removal, connected correctness/
lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices FL were
explicitly approved 2026-07-24. Slice J0's dependency-boundary preparation is
complete without moving gameplay owners; J1 is the active execution point.
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
@ -1240,8 +1240,12 @@ validated immutable flat collision records: synthetic and installed-DAT
source identity, exact float bits, deterministic pre-order, and corruption
tripwires pass without changing production traversal. I3 now packages all
flat collision/topology records through a shared typed mmap source: two
complete 2,232,170-key bakes are byte-identical with zero failures. I4 flat
traversal shadow implementation is the current execution point.
complete 2,232,170-key bakes are byte-identical with zero failures. I4I6 then
proved exact flat traversal, strict dual publication, and flat-authoritative
gameplay before removing every production parsed collision graph. Slice I7
passes 8,413 Release tests / 5 skips plus both exact-binary connected routes;
every stable checkpoint reports zero retained parsed collision graphs. J1 is
now the current execution point.
Evidence:
[`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md)
and
@ -1251,6 +1255,8 @@ and
and
[`../research/2026-07-25-slice-i3-prepared-collision-package.md`](../research/2026-07-25-slice-i3-prepared-collision-package.md)
and
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md)
and
[`2026-07-25-modern-runtime-slice-i.md`](2026-07-25-modern-runtime-slice-i.md).
The intended order is therefore:
@ -1264,8 +1270,8 @@ honest metrics + committed baselines (A — exit criteria block C)
-> incremental render scene (F)
-> delta GPU submission (G)
-> residual frame cleanup (H-a, H-b, H-c)
-> flat collision assets (I — CURRENT at I4)
-> presentation-independent runtime (J — §0.3 authorization)
-> flat collision assets (I — COMPLETE)
-> presentation-independent runtime (J — CURRENT at J1)
-> Linux/headless/multi-session (K)
-> evidence-gated GPU jobs (L)
```

View file

@ -1,10 +1,10 @@
# Modern runtime Slice I — flat collision assets and zero-allocation physics
**Status:** I0-I5 COMPLETE - retail oracle, zero-allocation transition
**Status:** I0I7 COMPLETE — retail oracle, zero-allocation transition
scratch, deterministic immutable collision records, complete prepared
package, exact flat traversal, dual publication, and connected shadow gate;
I6 production cutover, strict connected gate, and physical nine-stop soak
complete; user collision/visual acceptance active before graph deletion
package, exact flat traversal, dual publication, flat-authoritative production
cutover, parsed-graph removal, connected correctness/lifetime acceptance, and
documentation closeout
**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
@ -290,7 +290,20 @@ 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.
The user accepted the connected collision gate on 2026-07-25. Production
parsed-graph removal then landed at
`82f8d4f82e24ad85042ac3e25c4f6464bebce758`. The production
`PhysicsDataCache`, stable `GpuWorldState`, near-build payloads, and live
publication path now retain only immutable flat assets. Graph construction
survives solely in explicit tests, bake/equivalence tools, and source-oracle
constructors. The exact rollback for graph removal is:
```text
git revert 82f8d4f82e24ad85042ac3e25c4f6464bebce758
```
Do not revert I3I6 unless evidence implicates the prepared package or
flat-authoritative traversal itself.
### I7 — allocation, soak, and documentation closeout
@ -314,6 +327,22 @@ Final gate:
- connected portal/reconnect/interaction routes pass;
- exact cutover rollback recorded before user verification.
**Completed 2026-07-25.** Release build and the complete solution pass
8,413 tests / 5 skips. The focused collision/door/doorway/cellar/ramp/jump/
projectile/allocation gate passes 154 Core tests plus 47 App camera/projectile
tests; player, grounded publication, remote, projectile, and camera resolves
remain 0 B/resolve.
The exact-binary connected lifecycle/reconnect route and canonical nine-stop
R6 soak both pass with graceful exits. Every stable checkpoint reports
`0/0/0` retained parsed GfxObj/Setup/cell graphs while flat GfxObj/Setup/cell
residency remains populated. Movement, jump, combat, projectile, portal,
dungeon, revisit, reconnect, publication, retirement, and teardown checks
pass. The user accepted collision behavior over RDP. Absolute post-removal
GPU/frame-time and ordinary-process memory comparison remains a physical-
display measurement, not a Slice-I correctness blocker. Evidence:
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).
## 4. Commit order
Each unit is independently buildable and reversible:

View file

@ -1,7 +1,7 @@
# Modern runtime Slice J — presentation-independent runtime
**Status:** J0 COMPLETE — lifetime plan, project boundary, and dependency
guards; J1 waits for the Slice I6/I7 user collision/visual closeout
guards; Slice I is closed and J1 is ACTIVE
**Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice J
**Authorization:** the user approved Slices FL, including the otherwise-frozen
Slice J gameplay-owner moves, on 2026-07-24
@ -36,9 +36,10 @@ deletes the replaced App production path before the next group moves.
9. A headless construction path is proved after every coherent move. “No
window” means no App, Silk, OpenAL, retained UI, particle, or render assembly
is loaded—not a hidden graphical process.
10. The user collision/visual gate for Slice I6 still controls parsed-graph
deletion. J0 may land independently; gameplay-owner moves begin only after
the active I6/I7 closeout has reconciled the final collision owner shape.
10. Slice I is closed: production collision is flat-authoritative and retains
no parsed collision graph. J1 contracts adapt that final canonical owner
shape; they may not reintroduce a graph fallback or mirrored collision
authority.
## 2. Target dependency direction

View file

@ -0,0 +1,121 @@
# Slice I7 — flat collision closeout
## Result
Modern Runtime Slice I is complete. Production collision consumes the
immutable prepared flat representation exclusively, per-resolve scratch is
retained and reset-complete, and no parsed DAT collision graph remains in
stable gameplay state.
The two production cutover commits are:
- flat-authoritative traversal:
`068a06518dd710ca5e7f166754cbb7789ca1ed0f`;
- parsed-graph removal:
`82f8d4f82e24ad85042ac3e25c4f6464bebce758`.
Exact rollback commands:
```text
git revert 82f8d4f82e24ad85042ac3e25c4f6464bebce758
git revert 068a06518dd710ca5e7f166754cbb7789ca1ed0f
```
Revert graph removal first. Do not revert the I3 prepared-package, I4
flat-traversal, or I5 publication work unless evidence implicates those
layers.
## Production ownership after removal
- `PhysicsDataCache` publishes immutable flat GfxObj, Setup, CellStruct, and
EnvCell topology records directly.
- Stable `GpuWorldState` strips temporary `PhysicsDatBundle` source material.
- Near `LandblockBuild` payloads discard Environment/GfxObj raw collision
graphs after their immutable flat closure is built.
- Live objects publish through the same strict prepared source.
- Graph constructors remain only as explicit test, bake, and equivalence
oracles. Production has no graph fallback and no sampled referee.
- The single validated `acdream.pak` mmap remains the production render and
collision source.
This is a storage/ownership change only. Collision comparisons, traversal
order, source float bits, retail thresholds, cell semantics, and authoritative
game behavior did not change.
The retail divergence register was audited. No row was added or retired:
Slice I changes the representation and lifetime of already ported collision
data without introducing a behavior deviation.
## Automated evidence
- Release build: pass with zero errors and zero warnings.
- Complete Release solution: 8,413 passed / 5 skipped.
- Focused Core collision, doors, doorway, cellar/ramp, jump, projectile, and
allocation gate: 154 passed.
- Focused App camera/projectile gate: 47 passed.
- Player, grounded walkable publication, remote, projectile, and camera
profiles: 0 B/resolve.
- Direct flat `CellSurface`, walkable-plane, behaviorless-cell, stable-state
stripping, and production graph-residency fixtures pass.
## Connected lifecycle/reconnect gate
Report:
`logs/connected-world-gate-20260725-182242/report.json` in the exact-binary
gate worktree.
- Source and binary:
`82f8d4f82e24ad85042ac3e25c4f6464bebce758`.
- Result: PASS; two graceful exits; zero failures.
- Six capped checkpoints plus one fresh-process uncapped reconnect passed.
- Parsed collision graph counts were `0/0/0` at every checkpoint.
- Flat GfxObj/Setup/cell residency remained populated, including:
- capped login: `168/112/71`;
- Rynthid: `384/262/790`;
- Facility Hub: `436/272/279`;
- Holtburg after dungeon: `761/415/531`;
- fresh uncapped reconnect: `167/103/59`.
- Publication, retirement, upload, warmup, and class backlogs converged.
The 25 world-edge misses are the route's existing expected diagnostic, not a
new collision failure.
## Connected canonical nine-stop gate
Report:
`logs/connected-r6-soak-20260725-182823.report.json` in the exact-binary gate
worktree.
- Result: PASS; graceful exit; zero failures.
- All nine portal checkpoints materialized and stabilized.
- Parsed collision graph counts were `0/0/0` at all nine checkpoints.
- Flat cell residency covered Caul, Sawato, Rynthid, Aerlinthe, and Holtburg,
including 790 cells at Rynthid and 531 at Holtburg.
- Movement, jump/fall, combat/projectile, portal, dungeon, revisit, and
authoritative server-echo checks passed.
- Final publication, retirement, worker, destination, control, unload,
near/far, staged-upload, and composite-warmup backlogs were zero.
The known route warnings were limited to a Caul visible-workload delta of two,
an eleven-particle plateau delta, 32 optional missing-DAT VFX diagnostics, and
the 25 expected world-edge misses.
## Measurement boundary
The user accepted collision correctness under RDP. The RDP nine-stop route
also showed a bounded final plateau near 1.93 GiB working set while carrying
observer/automation state, below the earlier dual-representation diagnostic
route's roughly 2.06 GiB final Caul working set. Those are not controlled
ordinary-client measurements, so no exact performance percentage is claimed.
Absolute post-removal CPU, GPU, frame-time, and ordinary-process memory
comparison remains deferred to the next physical-display performance pass.
That deferral does not weaken the deterministic, connected, ownership, or
resource-lifetime acceptance above.
## Next execution point
Slice J1 begins the borrowed-view, typed-command, ordered-event, clock, and
lifecycle contract layer in `AcDream.Runtime`. It must adapt the current
canonical owners first; it may not create a second gameplay world or add a
frame of graphical input latency.