diff --git a/AGENTS.md b/AGENTS.md index a46cdb9e..6661957d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 diff --git a/CLAUDE.md b/CLAUDE.md index a558f80a..72e67d51 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 3a994e17..ff89058c 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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 F–I 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 diff --git a/docs/architecture/acdream-architecture.md b/docs/architecture/acdream-architecture.md index 28f6fc32..cf590d75 100644 --- a/docs/architecture/acdream-architecture.md +++ b/docs/architecture/acdream-architecture.md @@ -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 diff --git a/docs/architecture/worldbuilder-inventory.md b/docs/architecture/worldbuilder-inventory.md index a57e76eb..83f2d89c 100644 --- a/docs/architecture/worldbuilder-inventory.md +++ b/docs/architecture/worldbuilder-inventory.md @@ -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 diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index 38e47215..3328b099 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -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 20–87ms → 6–10ms, alloc spikes (30–75MB single-frame) eliminated, gen2 GC 5–11/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 I1–I6 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 | --- diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 8e969d01..e8e03a46 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -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`. diff --git a/docs/plans/2026-07-24-modern-runtime-architecture.md b/docs/plans/2026-07-24-modern-runtime-architecture.md index 029e850c..fe65880b 100644 --- a/docs/plans/2026-07-24-modern-runtime-architecture.md +++ b/docs/plans/2026-07-24-modern-runtime-architecture.md @@ -2,11 +2,11 @@ **Date:** 2026-07-24 -**Status:** Slices A–H are complete. Slice I6's flat-authoritative production -cutover is committed and awaits the final user collision/visual gate before -parsed-graph deletion. Slices F–L 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 A–I 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 F–L 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. I4–I6 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) ``` diff --git a/docs/plans/2026-07-25-modern-runtime-slice-i.md b/docs/plans/2026-07-25-modern-runtime-slice-i.md index c548f02f..6be2ea9b 100644 --- a/docs/plans/2026-07-25-modern-runtime-slice-i.md +++ b/docs/plans/2026-07-25-modern-runtime-slice-i.md @@ -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:** I0–I7 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 190–200 FPS with stable CPU p50 ~5.0 ms / p95 ~5.9–7.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 I3–I6 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: diff --git a/docs/plans/2026-07-25-modern-runtime-slice-j.md b/docs/plans/2026-07-25-modern-runtime-slice-j.md index fa2faf46..d170a1c9 100644 --- a/docs/plans/2026-07-25-modern-runtime-slice-j.md +++ b/docs/plans/2026-07-25-modern-runtime-slice-j.md @@ -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 F–L, 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 diff --git a/docs/research/2026-07-25-slice-i7-closeout.md b/docs/research/2026-07-25-slice-i7-closeout.md new file mode 100644 index 00000000..f7b92dd1 --- /dev/null +++ b/docs/research/2026-07-25-slice-i7-closeout.md @@ -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.