diff --git a/AGENTS.md b/AGENTS.md index 711e3ab9..aafe9ebc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -198,11 +198,20 @@ generation/lifecycle contracts, and teardown acknowledgements project the same canonical App owners without a mirror or extra frame. Runtime tests pass 13/13, App tests pass 3,838/3 skips, the complete Release suite passes 8,424/5 skips, and the exact-binary seven-checkpoint connected lifecycle/reconnect gate passes -with graceful exits. J2 session lifetime and ordered transport extraction is -active. J0's rollback is +with graceful exits. J2 is complete at `75930787`: the canonical +`WorldSession` generation, connect/enter/tick/replace transaction, ordered +inbound route, and retryable teardown acknowledgement now live in Runtime. +App retains only option conversion, graphical callbacks, and one borrowed +inertable UI command projection. Runtime tests pass 79/79, App tests pass +3,776/3 skips, the complete Release suite passes 8,428/5 skips, and the exact- +binary seven-checkpoint gate passes with graceful exits and zero render-shadow +mismatches or pending deltas. J3 canonical identity, properties, and +object-table extraction is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. +J2's rollback is +`git revert 75930787741db40a83eab8663e4464dce8d687ba`. 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 I is closed in @@ -219,7 +228,8 @@ the portal-warmup corrections. Evidence: `docs/research/2026-07-25-slice-i5-dual-collision-shadow.md` and `docs/research/2026-07-25-slice-i6-flat-production-cutover.md` and `docs/research/2026-07-25-slice-i7-closeout.md` and -`docs/research/2026-07-25-slice-j1-runtime-contract-closeout.md`. +`docs/research/2026-07-25-slice-j1-runtime-contract-closeout.md` and +`docs/research/2026-07-25-slice-j2-session-lifetime-closeout.md`. **Structural prerequisite before new M4 subsystem work:** all eight behavior-preserving `GameWindow` decomposition slices and the automated diff --git a/CLAUDE.md b/CLAUDE.md index fdb75948..23c914b5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -196,11 +196,20 @@ generation/lifecycle contracts, and teardown acknowledgements project the same canonical App owners without a mirror or extra frame. Runtime tests pass 13/13, App tests pass 3,838/3 skips, the complete Release suite passes 8,424/5 skips, and the exact-binary seven-checkpoint connected lifecycle/reconnect gate passes -with graceful exits. J2 session lifetime and ordered transport extraction is -active. J0's rollback is +with graceful exits. J2 is complete at `75930787`: the canonical +`WorldSession` generation, connect/enter/tick/replace transaction, ordered +inbound route, and retryable teardown acknowledgement now live in Runtime. +App retains only option conversion, graphical callbacks, and one borrowed +inertable UI command projection. Runtime tests pass 79/79, App tests pass +3,776/3 skips, the complete Release suite passes 8,428/5 skips, and the exact- +binary seven-checkpoint gate passes with graceful exits and zero render-shadow +mismatches or pending deltas. J3 canonical identity, properties, and +object-table extraction is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. +J2's rollback is +`git revert 75930787741db40a83eab8663e4464dce8d687ba`. 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 I is closed in @@ -217,7 +226,8 @@ the portal-warmup corrections. Evidence: `docs/research/2026-07-25-slice-i5-dual-collision-shadow.md` and `docs/research/2026-07-25-slice-i6-flat-production-cutover.md` and `docs/research/2026-07-25-slice-i7-closeout.md` and -`docs/research/2026-07-25-slice-j1-runtime-contract-closeout.md`. +`docs/research/2026-07-25-slice-j1-runtime-contract-closeout.md` and +`docs/research/2026-07-25-slice-j2-session-lifetime-closeout.md`. **Structural prerequisite before new M4 subsystem work:** all eight behavior-preserving `GameWindow` decomposition slices and the automated diff --git a/docs/ISSUES.md b/docs/ISSUES.md index bbe97e72..69eca4ad 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -64,8 +64,9 @@ What does NOT go here: 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 and J1's borrowed - view/command/event/lifecycle contract are live; J2 session lifetime and - ordered transport extraction is active from + view/command/event/lifecycle contract are live. J2's canonical + session/transport lifetime and ordered inbound route are complete at + `75930787`; J3 identity, properties, and object-table extraction 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 diff --git a/docs/architecture/acdream-architecture.md b/docs/architecture/acdream-architecture.md index 72d8302b..34374229 100644 --- a/docs/architecture/acdream-architecture.md +++ b/docs/architecture/acdream-architecture.md @@ -207,7 +207,9 @@ src/ RuntimeAssemblyMarker.cs -> J0 dependency boundary GameRuntime*.cs -> J1 borrowed views, synchronous commands, ordered deltas, clock, generation + teardown - -> J2 session lifetime and ordered transport extraction active + Session/ -> J2 canonical session lifetime, ordered + inbound routing + retryable teardown + -> J3 identity, properties, and object-table extraction active -> may reference Core, Core.Net, Content, and Plugin.Abstractions only -> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index b4d8b63f..c0aa1ada 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -1678,14 +1678,19 @@ port in any phase — no separate listing here. > acknowledgements over the same canonical owners. Its 13 Runtime tests, 3,838 > App tests / 3 skips, 8,424-test / 5-skip complete Release suite, and exact- > binary seven-checkpoint lifecycle/reconnect gate pass with graceful exits. -> J2 is now active. +> J2 moved the canonical session/transport generation, ordered inbound route, +> and retryable teardown into Runtime at `75930787`. Its 79 Runtime tests, +> 3,776 App tests / 3 skips, 8,428-test / 5-skip complete Release suite, and +> exact-binary seven-checkpoint gate pass with graceful exits and zero render- +> shadow mismatches. J3 canonical identity, properties, and object-table +> extraction 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 I is closed in -> [its detailed plan](2026-07-25-modern-runtime-slice-i.md); Slice J2 executes +> [its detailed plan](2026-07-25-modern-runtime-slice-i.md); Slice J3 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 diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 441e0631..2553051c 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -153,10 +153,16 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I and teardown acknowledgements without moving a canonical owner. Runtime tests pass 13/13, App tests pass 3,838/3 skips, the full Release suite passes 8,424/5 skips, and the exact-binary seven-checkpoint connected gate exits - gracefully. J2 session lifetime and ordered transport extraction is active under + gracefully. J2 moved canonical session/transport lifetime and ordered + inbound routing into Runtime at `75930787`; 79 Runtime tests, 3,776 App + tests / 3 skips, 8,428 full Release tests / 5 skips, and its exact-binary + seven-checkpoint gate pass with graceful exits. J3 canonical identity, + properties, and object-table extraction 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). +Slice-J2 closeout evidence is +[`../research/2026-07-25-slice-j2-session-lifetime-closeout.md`](../research/2026-07-25-slice-j2-session-lifetime-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 6407760e..40c15708 100644 --- a/docs/plans/2026-07-24-modern-runtime-architecture.md +++ b/docs/plans/2026-07-24-modern-runtime-architecture.md @@ -2,12 +2,12 @@ **Date:** 2026-07-24 -**Status:** Slices A–I are complete. Flat-authoritative collision, zero- +**Status:** Slices A–I and J0–J2 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–J1 established the enforced Runtime -boundary and the borrowed view/command/event seam without moving canonical -gameplay owners; J2 is the active execution point. +boundary and borrowed contract seam; J2 moved canonical session/transport +lifetime and ordered inbound routing. J3 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. @@ -1246,7 +1246,9 @@ 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. +complete with borrowed contracts, and J2 now owns canonical session/transport +lifetime plus ordered inbound routing in Runtime. J3 is the current execution +point. Evidence: [`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md) and @@ -1258,7 +1260,9 @@ and 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). +[`../research/2026-07-25-slice-j2-session-lifetime-closeout.md`](../research/2026-07-25-slice-j2-session-lifetime-closeout.md) +and +[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md). The intended order is therefore: @@ -1272,7 +1276,7 @@ honest metrics + committed baselines (A — exit criteria block C) -> delta GPU submission (G) -> residual frame cleanup (H-a, H-b, H-c) -> flat collision assets (I — COMPLETE) - -> presentation-independent runtime (J — CURRENT at J2) + -> presentation-independent runtime (J — CURRENT at J3) -> Linux/headless/multi-session (K) -> evidence-gated GPU jobs (L) ``` 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 a1b0aa97..a599e7ab 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–J1 COMPLETE — lifetime boundary plus borrowed view, command, -event, clock, generation, and teardown contracts; J2 is ACTIVE +**Status:** J0–J2 COMPLETE — boundary, borrowed contracts, and canonical +session/transport lifetime; J3 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 @@ -143,6 +143,8 @@ git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8 ### J2 — session lifetime and ordered transport group +**Completed 2026-07-25 at `75930787`.** + **Detailed execution plan:** [`2026-07-25-modern-runtime-slice-j2.md`](2026-07-25-modern-runtime-slice-j2.md). @@ -160,6 +162,21 @@ Gate: connected login/logout/reconnect and malformed/reentrant lifecycle suites produce the same packet/order trace; no-window construction can connect and disconnect without loading App or a backend. +Result: Runtime now owns the one `WorldSession` generation, ordered inbound +route, connect/enter/tick/replace transaction, and exact retryable teardown +acknowledgement. App keeps only connection-option conversion, graphical +callbacks, and one borrowed inertable UI command projection. The Release build, +79 Runtime tests, 3,776 App tests / 3 skips, 8,428 complete tests / 5 skips, +and the exact-binary seven-checkpoint connected gate pass with graceful exits. +Evidence: +[`../research/2026-07-25-slice-j2-session-lifetime-closeout.md`](../research/2026-07-25-slice-j2-session-lifetime-closeout.md). + +Exact rollback: + +```text +git revert 75930787741db40a83eab8663e4464dce8d687ba +``` + ### J3 — canonical identity, properties, and object-table group - Strip renderer, particle, Wb, and streaming components from the canonical diff --git a/docs/plans/2026-07-25-modern-runtime-slice-j2.md b/docs/plans/2026-07-25-modern-runtime-slice-j2.md index ef4bb7bd..fe321e5a 100644 --- a/docs/plans/2026-07-25-modern-runtime-slice-j2.md +++ b/docs/plans/2026-07-25-modern-runtime-slice-j2.md @@ -1,8 +1,9 @@ # Modern runtime Slice J2 — session lifetime and ordered transport -**Status:** ACTIVE +**Status:** COMPLETE 2026-07-25 **Parent:** `2026-07-25-modern-runtime-slice-j.md`, J2 **Production base:** `854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8` +**Production commit:** `75930787741db40a83eab8663e4464dce8d687ba` **J1 documentation:** `f84624b1e9b83f928debdbe65a5a1576b999ee34` ## 1. Objective @@ -180,10 +181,22 @@ J2 changes no pixels, input feel, or retail algorithm. A separate user visual pause is therefore not required unless the connected gate exposes a presentation symptom. -## 6. Rollback +## 6. Result and rollback -The exact J2 rollback commit is recorded here before its connected gate. J1 -remains independently reversible: +All focused and complete gates passed: 79 Runtime tests, 3,776 App tests with +three skips, 8,428 complete Release tests with five skips, and the exact-binary +seven-checkpoint connected lifecycle/reconnect route. Both processes exited +gracefully; every checkpoint had zero render-shadow mismatch and zero pending +render delta. Evidence: +[`../research/2026-07-25-slice-j2-session-lifetime-closeout.md`](../research/2026-07-25-slice-j2-session-lifetime-closeout.md). + +Exact J2 rollback: + +```text +git revert 75930787741db40a83eab8663e4464dce8d687ba +``` + +J1 remains independently reversible: ```text git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8 diff --git a/docs/research/2026-07-25-slice-j2-session-lifetime-closeout.md b/docs/research/2026-07-25-slice-j2-session-lifetime-closeout.md new file mode 100644 index 00000000..e7231039 --- /dev/null +++ b/docs/research/2026-07-25-slice-j2-session-lifetime-closeout.md @@ -0,0 +1,69 @@ +# Modern runtime Slice J2 closeout + +## Result + +Slice J2 is complete at production commit +`75930787741db40a83eab8663e4464dce8d687ba`. + +The one canonical `WorldSession` generation and its connect, EnterWorld, tick, +replacement, and retryable stop transaction now live in `AcDream.Runtime`. +Runtime also owns the complete ordered inbound subscription set and exact +teardown acknowledgement stages. The superseded App controller, lifecycle +host, event router, and subscription owner were deleted. + +App remains the graphical host. It converts `RuntimeOptions` into immutable +Runtime connection options, supplies graphical/domain lifecycle callbacks, and +projects one borrowed `ICommandBus` route for retained UI. That bridge stores +no generation, transport, or in-world state; only one route can be active, and +the old route becomes inert before inbound callbacks detach. + +No AC wire behavior, pixels, input timing, or retail algorithm changed. + +## Automated acceptance + +At the production commit: + +- Runtime tests: 79 passed; +- App tests: 3,776 passed / 3 skipped; +- complete Release solution: 8,428 passed / 5 skipped; +- Release solution build: pass. + +Coverage includes bind-before-connect and activate-after-EnterWorld ordering, +stale generation rejection, malformed and reentrant lifecycle paths, +construction rollback, exact retryable teardown suffixes, one-active-route +graphical projection, stale-route inertness, and a Runtime-only +connect/disconnect graph that loads no App, UI, Silk.NET, OpenAL, Arch, or +ImGui assembly. + +## Connected lifecycle acceptance + +Raw evidence: +`logs/connected-world-gate-20260725-193936/report.json`. + +Result: PASS on the exact production commit. + +- Capped process: login, Aerlinthe, Rynthid, Facility Hub, Holtburg after the + dungeon, and Aerlinthe revisit all completed. +- Fresh uncapped process: reconnect completed. +- Seven of seven checkpoints passed. +- Both processes exited gracefully with exit code zero. +- Every checkpoint reported zero render-shadow mismatches and zero pending + render deltas. +- No gate failure was recorded. +- The only warning was 25 expected world-edge landblock misses. + +This proves that moving session/transport lifetime and inbound route ownership +out of App preserved live connection, packet routing, world traversal, +replacement, and graceful shutdown on the exact binary. + +## Exact rollback + +```text +git revert 75930787741db40a83eab8663e4464dce8d687ba +``` + +J1 remains independently reversible with: + +```text +git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8 +```