diff --git a/AGENTS.md b/AGENTS.md index f335fe81..825c9edb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -345,7 +345,12 @@ single `GameRuntime` root at `96ddd165`; J7.2/J7.3 cut graphical production and shutdown over at `ce41efb9`. Its 383 Runtime tests, 3,717 App tests / 3 skips, 8,661 complete Release tests / 5 skips, lifecycle/reconnect route, canonical nine-stop route, and the user's 2026-07-27 exact post-cutover visual -matrix pass. J7 is closed; J8 no-window integration is active. +matrix pass. J7 is closed. J8 closed Slice J at `a9a822f2`: graphical and +no-window hosts share one `GameRuntime`, one retryable canonical-generation +reset transaction, and one gameplay-owner graph. Its 395 Runtime tests, 3,731 +App tests / 3 skips, 8,696 complete Release tests / 5 skips, exact-binary +lifecycle/reconnect route, and canonical nine-stop route pass. Slice K +Linux headless/multi-session implementation is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is @@ -400,6 +405,8 @@ J7.1's rollback is `git revert 96ddd16539e670a5ce9b1f86677530e3fbc3f635`. J7.2/J7.3's rollback is `git revert ce41efb9e5938f79a7580476b949d172f52a1e69`. +J8's rollback is +`git revert a9a822f206cc6021bc099988144488f3bd7c397b`. 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 @@ -426,8 +433,10 @@ closeout is closeout is `docs/research/2026-07-26-slice-j6-3-teleport-correlation.md`; J6 closeout is `docs/research/2026-07-26-slice-j6-4-host-acknowledgement.md`. J7 closeout is -`docs/research/2026-07-26-slice-j7-game-runtime-root-cutover.md`; J8 executes -from `docs/plans/2026-07-26-modern-runtime-slice-j8.md`. The exact G4 visual +`docs/research/2026-07-26-slice-j7-game-runtime-root-cutover.md`; J8/Slice-J +closeout is +`docs/research/2026-07-27-slice-j8-no-window-closeout.md`; Slice K executes +from `docs/plans/2026-07-26-modern-runtime-slice-k.md`. The exact G4 visual rollback is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or the portal-warmup corrections. Evidence: @@ -467,7 +476,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 J8+, and #225's +R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice K+, 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 c90e684f..92a5428f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -343,7 +343,12 @@ single `GameRuntime` root at `96ddd165`; J7.2/J7.3 cut graphical production and shutdown over at `ce41efb9`. Its 383 Runtime tests, 3,717 App tests / 3 skips, 8,661 complete Release tests / 5 skips, lifecycle/reconnect route, canonical nine-stop route, and the user's 2026-07-27 exact post-cutover visual -matrix pass. J7 is closed; J8 no-window integration is active. +matrix pass. J7 is closed. J8 closed Slice J at `a9a822f2`: graphical and +no-window hosts share one `GameRuntime`, one retryable canonical-generation +reset transaction, and one gameplay-owner graph. Its 395 Runtime tests, 3,731 +App tests / 3 skips, 8,696 complete Release tests / 5 skips, exact-binary +lifecycle/reconnect route, and canonical nine-stop route pass. Slice K +Linux headless/multi-session implementation is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is @@ -398,6 +403,8 @@ J7.1's rollback is `git revert 96ddd16539e670a5ce9b1f86677530e3fbc3f635`. J7.2/J7.3's rollback is `git revert ce41efb9e5938f79a7580476b949d172f52a1e69`. +J8's rollback is +`git revert a9a822f206cc6021bc099988144488f3bd7c397b`. 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 @@ -424,8 +431,10 @@ closeout is closeout is `docs/research/2026-07-26-slice-j6-3-teleport-correlation.md`; J6 closeout is `docs/research/2026-07-26-slice-j6-4-host-acknowledgement.md`. J7 closeout is -`docs/research/2026-07-26-slice-j7-game-runtime-root-cutover.md`; J8 executes -from `docs/plans/2026-07-26-modern-runtime-slice-j8.md`. The exact G4 visual +`docs/research/2026-07-26-slice-j7-game-runtime-root-cutover.md`; J8/Slice-J +closeout is +`docs/research/2026-07-27-slice-j8-no-window-closeout.md`; Slice K executes +from `docs/plans/2026-07-26-modern-runtime-slice-k.md`. The exact G4 visual rollback is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or the portal-warmup corrections. Evidence: @@ -465,7 +474,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 J8+, and #225's +R6 ownership cleanup, TS-50/TS-51/TS-53, Modern Runtime Slice K+, and #225's lifestone/particle alpha visual gate. Start structural work at `memory/project_gamewindow_decomposition.md` and diff --git a/docs/README.md b/docs/README.md index 860526e5..ff291bdb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,14 +35,15 @@ banner cannot silently override the current program state. in `#225`; its connected resource-lifetime and performance routes pass. - **Carried behavior debt:** `#153` (far teleport onto an unstreamed edge), `#116` (two narrowed slide-response cases), and divergence rows TS-50/TS-51. -- **Active engineering track:** complete Slice J's world handshake, - composition root, and no-window closeout, then build the approved - Linux/headless multi-session host in Slice K. J5.7's exact rollback is - `git revert cdee7a4b49addb5e1500753f6a885f7c899bd0f0`. +- **Active engineering track:** Slice J's presentation-independent runtime, + composition root, shared generation reset, and no-window closeout are + complete. Build the approved Linux/headless multi-session host in Slice K. + J8's exact rollback is + `git revert a9a822f206cc6021bc099988144488f3bd7c397b`. - **Divergence audit:** 178 active rows — IA 17, AD 37, AP 85, TS 34, and UN 5 — plus the retained retired TS-37 history note. -- **Latest automated baseline:** Release build succeeds; 8,596 tests pass and - five are intentionally skipped. The exact J5.7 lifecycle/reconnect and +- **Latest automated baseline:** Release build succeeds; 8,696 tests pass and + five are intentionally skipped. The exact J8 lifecycle/reconnect and canonical nine-stop gates match embedded binary/source commit, converge every backlog, and complete with graceful zero-code exits and zero failures. diff --git a/docs/architecture/acdream-architecture.md b/docs/architecture/acdream-architecture.md index ace25e3a..d652f178 100644 --- a/docs/architecture/acdream-architecture.md +++ b/docs/architecture/acdream-architecture.md @@ -241,7 +241,8 @@ src/ World/ RuntimeWorldEnvironmentState.cs -> canonical calendar/time/weather owner RuntimeWorldTransitState.cs -> canonical reveal generation/readiness owner - -> J3–J6 complete; J7 composition-root convergence active + RuntimeGenerationReset.cs -> one retryable canonical-generation reset + -> Slice J complete; graphical and no-window hosts share one GameRuntime -> 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/architecture/code-structure.md b/docs/architecture/code-structure.md index a5415126..da336f39 100644 --- a/docs/architecture/code-structure.md +++ b/docs/architecture/code-structure.md @@ -479,7 +479,7 @@ useful ordering seam, but its ownership status is **partial**. | Projectile simulation | **J5.6 complete** | `RuntimeEntityRecord`/`RuntimePhysicsState` own the canonical projectile component, exact-key workset, prediction/correction state, unchanged retail quantum/integration/sweep/collision loop, and cell commits. App resolves immutable Setup/DAT shape input and projects committed render, shadow, and effect-pose results only (`2aee3356`). | | Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own typed-meter publication and exact retryable retirement. `StreamingController` owns stable destination/control/unload/Near/Far queues and destination reservation. CPU mesh-cache restaging requires an exact live owner. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`; Slice E closeout `91e82c3c`). | | Render-frame orchestration | **Complete** | `RenderFrameOrchestrator` owns the GPU-flight, resource, world/PView/shared-alpha, private-presentation, diagnostics, screenshot, and recovery graph. `GameWindow.OnRender` takes one logical window-size snapshot and performs one immutable handoff (`9d7df1bf`). | -| Unified `GameEntity` | **Slice J active at J7** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, and the complete J5 action/combat/magic/movement/physics/remote/projectile simulation graph share failure-safe Runtime owners while exact graphical sidecars stay in App. J5 closeout proves Runtime-only parity and one terminal ownership ledger. J6 moved world environment, reveal-generation truth, exact F751/Position destination correlation, and typed graphical-host acknowledgement into Runtime. J7 now composes those already-proven owners behind one `GameRuntime` root without adding another state layer. | +| Unified `GameEntity` | **Slice J complete** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, gameplay state, action/combat/magic/movement/physics/remote/projectile simulation, world environment, reveal/transit truth, and host acknowledgement share failure-safe Runtime owners while exact graphical sidecars stay in App. One `GameRuntime` composes the graph. `RuntimeGenerationReset` is the sole retryable canonical-generation reset for graphical and no-window hosts; the deterministic direct host proves lifecycle, commands, portal, reconnect, GUID reuse, fault recovery, isolation, and terminal convergence without presentation assemblies (`a9a822f2`). | ### 4.3 Revised extraction sequence diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index 0de0fad2..a9162a66 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -1,6 +1,6 @@ # acdream — strategic roadmap -**Status:** Living document. Updated 2026-07-27. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, J5.5 per-session physics/remote simulation at `7e6033d0`, J5.6 projectile simulation at `2aee3356`, and J5.7 combined simulation closeout at `cdee7a4b`. J6.1 world-environment ownership is closed at `902076c0`; J6.2 canonical reveal generation and typed destination readiness is closed at `a6860d55` plus `acb845d8`; J6.3 exact F751/Position destination correlation is closed at `6a063a27`; J6.4 exact graphical-host acknowledgement and owner cleanup is closed at `18d17d8b`. J7's one graphical `GameRuntime` root is closed at `ce41efb9`, including the user's 2026-07-27 exact post-cutover visual acceptance. J8 no-window integration is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate. +**Status:** Living document. Updated 2026-07-27. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions at `f5f7b417`, J5.3 combat/magic intent at `20df9d15`, J5.4 local movement/outbound cadence at `aa3f4a60`, J5.5 per-session physics/remote simulation at `7e6033d0`, J5.6 projectile simulation at `2aee3356`, and J5.7 combined simulation closeout at `cdee7a4b`. J6.1 world-environment ownership is closed at `902076c0`; J6.2 canonical reveal generation and typed destination readiness is closed at `a6860d55` plus `acb845d8`; J6.3 exact F751/Position destination correlation is closed at `6a063a27`; J6.4 exact graphical-host acknowledgement and owner cleanup is closed at `18d17d8b`. J7's one graphical `GameRuntime` root is closed at `ce41efb9`, including the user's 2026-07-27 exact post-cutover visual acceptance. J8 closed Slice J at `a9a822f2` with one shared graphical/no-window root and generation-reset transaction. Slice K Linux headless/multi-session work is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate. **Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file. --- @@ -1797,8 +1797,10 @@ port in any phase — no separate listing here. > Runtime tests, 3,716 App tests / 3 skips, 8,642-test / 5-skip complete Release > suite, and exact-binary lifecycle/reconnect route pass with zero ownership > debt at every checkpoint. J7 completed at `ce41efb9`; the user accepted its -> exact post-cutover visual matrix on 2026-07-27. J8 no-window integration and -> Slice-J closeout are active. +> exact post-cutover visual matrix on 2026-07-27. J8 closed Slice J at +> `a9a822f2`: 395 Runtime tests, 3,731 App tests / 3 skips, 8,696 complete- +> solution tests / 5 skips, lifecycle/reconnect, and canonical nine-stop gates +> pass. Slice K Linux headless/multi-session implementation is active. > The historical exact cutover > rollback remains > `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete: diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 7619f8a5..8198a77b 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -273,8 +273,13 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I / 5 skips, and exact-binary lifecycle/reconnect route pass with every environment/transit/host ledger at zero. J7 composition-root convergence completed at `ce41efb9`; the user accepted its exact post-cutover visual - matrix on 2026-07-27. J8 is active under - [`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md). + matrix on 2026-07-27. J8 closed Slice J at `a9a822f2`: graphical and + no-window hosts share one `GameRuntime`, one canonical generation-reset + transaction, and one gameplay-owner graph. Its 395 Runtime tests, 3,731 App + tests / 3 skips, 8,696 complete-solution tests / 5 skips, exact-binary + lifecycle/reconnect route, and canonical nine-stop route pass. Slice K is + active under + [`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.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 diff --git a/docs/plans/2026-07-24-modern-runtime-architecture.md b/docs/plans/2026-07-24-modern-runtime-architecture.md index 61a09574..1cea3a83 100644 --- a/docs/plans/2026-07-24-modern-runtime-architecture.md +++ b/docs/plans/2026-07-24-modern-runtime-architecture.md @@ -25,8 +25,9 @@ J6 completed at `18d17d8b`: Runtime owns world environment, canonical reveal generation/readiness, exact F751/Position destination correlation, and the generation/cell-scoped graphical-host acknowledgement suffix. J7 completed at `ce41efb9` with its automated gates and the user's 2026-07-27 -physical-display acceptance. J8 no-window integration and Slice-J closeout are -active. +physical-display acceptance. J8 and Slice J closed at `a9a822f2`: graphical +and direct hosts share one `GameRuntime`, one retryable generation-reset +transaction, and one canonical gameplay-owner graph. Slice K is active. **Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit. @@ -1065,7 +1066,7 @@ host-parity tests after each move. **Prepared execution plan:** [`2026-07-26-modern-runtime-slice-k.md`](2026-07-26-modern-runtime-slice-k.md). -Implementation begins after Slice J's no-window closeout. +Implementation began after Slice J's no-window closeout at `a9a822f2`. **Purpose:** Deliver efficient automated bots. @@ -1304,8 +1305,10 @@ projection stages and App owns only retryable resource receipts. Its 365 Runtime tests, 3,716 App tests / 3 skips, 8,642-test / 5-skip complete Release suite, and exact-binary lifecycle/reconnect gate pass with zero ownership debt at every stable checkpoint. J7 completed at `ce41efb9`, and the user accepted -its exact post-cutover visual matrix on 2026-07-27. J8 is the current execution -point. +its exact post-cutover visual matrix on 2026-07-27. J8 closed Slice J at +`a9a822f2`; 395 Runtime tests, 3,731 App tests / 3 skips, 8,696 complete- +solution tests / 5 skips, lifecycle/reconnect, and canonical nine-stop gates +pass. Slice K 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 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 3484bb6f..4cf8754d 100644 --- a/docs/plans/2026-07-25-modern-runtime-slice-j.md +++ b/docs/plans/2026-07-25-modern-runtime-slice-j.md @@ -1,6 +1,6 @@ # Modern runtime Slice J — presentation-independent runtime -**Status:** J0–J7 COMPLETE; J8 ACTIVE +**Status:** COMPLETE 2026-07-27 **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 @@ -416,7 +416,7 @@ git revert ce41efb9e5938f79a7580476b949d172f52a1e69 **Detailed execution plan:** [`2026-07-26-modern-runtime-slice-j8.md`](2026-07-26-modern-runtime-slice-j8.md). -Implementation is active after J7's 2026-07-27 physical-display acceptance. +Completed at `a9a822f2` after J7's 2026-07-27 physical-display acceptance. - Build a transport/content test host that constructs Runtime directly. - Connect, enter world, receive chat/inventory/world updates, move, use, @@ -433,6 +433,16 @@ integration, resource teardown, packet/order/timing parity, and the user visual matrix all pass. Slice K may then build the Linux multi-session host without another gameplay extraction. +J8 passes 395 Runtime tests, 3,731 App tests / 3 skips, 8,696 complete-solution +tests / 5 skips, the exact-binary lifecycle/reconnect route, and the canonical +nine-stop route. Graphical and direct hosts share one `GameRuntime`, one +retryable canonical-generation reset transaction, and the same gameplay-owner +graph. Exact rollback: + +```text +git revert a9a822f206cc6021bc099988144488f3bd7c397b +``` + ## 5. Commit order 1. `arch(runtime): establish presentation-independent boundary` diff --git a/docs/plans/2026-07-26-modern-runtime-slice-j8.md b/docs/plans/2026-07-26-modern-runtime-slice-j8.md index 9b77c239..67d5d4ab 100644 --- a/docs/plans/2026-07-26-modern-runtime-slice-j8.md +++ b/docs/plans/2026-07-26-modern-runtime-slice-j8.md @@ -1,6 +1,6 @@ # Modern runtime Slice J8 — no-window integration and Slice J closeout -**Status:** ACTIVE — J7 ENTRY GATE PASSED 2026-07-27 +**Status:** COMPLETE 2026-07-27 — SLICE J CLOSED **Parent:** `2026-07-25-modern-runtime-slice-j.md`, J8 **Authorization:** the user approved Slices F–L, including the J gameplay-owner gates, on 2026-07-24 @@ -139,6 +139,11 @@ increasing within a generation and restart only when the generation changes. ### J8.1 — one direct root host +**Complete at `a9a822f2`.** `RuntimeGenerationReset` is the single retryable +canonical-generation reset transaction. Graphical App reset borrows that +transaction and retains only its presentation stages; the no-window host uses +the same Runtime root and reset owner directly. + - Add the Runtime-owned generation-reset transaction and its narrow borrowed host-retirement acknowledgement. - Replace the child-by-child canonical portions of App's reset bindings with @@ -162,6 +167,11 @@ generation, and converges without a presentation assembly or duplicate owner. ### J8.2 — deterministic transport/content lifecycle +**Complete at `a9a822f2`.** `NoWindowGameRuntimeHost` drives the production +root through connect, enter, decoded state, movement, use, combat, casting, +projectile work, portal completion, stop, reconnect, stale-route rejection, +GUID reuse, and terminal convergence. + - Build deterministic session operations and in-memory transport. - Bind the exact session lifecycle order: reset → attach inbound → connect → select identity → enter → activate @@ -180,6 +190,11 @@ root, accepted ordering is stable, and old-generation routes are inert. ### J8.3 — cancellation, faults, isolation, and credentials +**Complete at `a9a822f2`.** Focused gates cover reset retry/no-replay, +portal cancellation before and after readiness, observer failure containment, +two simultaneous isolated roots, stale-generation routes, and +credential-safe traces. + - Cancel during connect, after inbound attach, during portal readiness, and with a host acknowledgement pending. - Inject route-construction, route-detach, observer, projection @@ -196,6 +211,24 @@ credential-safe. ### J8.4 — complete Slice J gate +**Complete.** The exact committed binary passed: + +- 395/395 Runtime tests; +- 3,731 App tests / 3 skips; +- 8,696 complete-solution tests / 5 intentional skips; +- connected lifecycle/reconnect: + `logs/connected-world-gate-20260727-004418/report.json`; +- canonical nine-stop route: + `logs/connected-r6-soak-20260727-004942.report.json`; +- the already accepted J7 physical-display matrix. + +The no-window process loads no App, UI, renderer, audio, Silk.NET, OpenAL, +Arch, or ImGui assembly. The dependency and divergence audits found no new +retail deviation. Retail chat-history research also confirmed that session +end does not clear the bounded transcript: `CPlayerSystem::OnEndCharacterSession` +at `0x00562870` reinitializes the character session, while the explicit +`ClientCommunicationSystem::DoClear` at `0x0056E600` owns chat-buffer clearing. + - Run focused Runtime tests. - Run the Release solution build. - Run the complete Release suite. @@ -254,10 +287,14 @@ extracting gameplay again. ## 7. Commit and rollback discipline -J8 implementation lands as one test/integration closeout commit after the J7 -visual entry gate, followed by one documentation closeout commit if needed. -The full production SHA and exact `git revert ` are recorded here before -Slice K starts. J8 must not modify the J7 rollback point: +J8 implementation landed as one test/integration closeout commit after the J7 +visual entry gate. Its exact rollback is: + +```text +git revert a9a822f206cc6021bc099988144488f3bd7c397b +``` + +J8 did not modify the J7 rollback point: ```text git revert ce41efb9e5938f79a7580476b949d172f52a1e69 diff --git a/docs/plans/2026-07-26-modern-runtime-slice-k.md b/docs/plans/2026-07-26-modern-runtime-slice-k.md index 64ff4add..d85d5a9b 100644 --- a/docs/plans/2026-07-26-modern-runtime-slice-k.md +++ b/docs/plans/2026-07-26-modern-runtime-slice-k.md @@ -1,6 +1,6 @@ # Modern runtime Slice K — Linux headless and multi-session host -**Status:** PREPARED — BEGINS AFTER SLICE J CLOSEOUT +**Status:** ACTIVE 2026-07-27 — SLICE J ENTRY GATE PASSED **Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice K **Authorization:** the user approved Slices F–L on 2026-07-24 **Purpose:** run efficient automated clients on Linux without a display, GPU, @@ -9,10 +9,14 @@ prove 30 isolated sessions can share immutable content safely in one process. ## 1. Entry contract -Slice K starts only after J8 proves one direct `GameRuntime` can connect, enter +Slice K starts after J8 proves one direct `GameRuntime` can connect, enter world, receive authoritative state, move, use, fight/cast, portal, stop, reconnect, and converge without presentation assemblies. +That entry gate passed at `a9a822f2`: 395 Runtime tests, 3,731 App tests / +3 skips, 8,696 complete-solution tests / 5 skips, exact-binary connected +lifecycle/reconnect, and canonical nine-stop routes all pass. + K adds a production host over that same root. It does not move gameplay out of App again and does not create a bot-specific world model. diff --git a/docs/research/2026-07-27-slice-j8-no-window-closeout.md b/docs/research/2026-07-27-slice-j8-no-window-closeout.md new file mode 100644 index 00000000..d67f294e --- /dev/null +++ b/docs/research/2026-07-27-slice-j8-no-window-closeout.md @@ -0,0 +1,94 @@ +# Slice J8 no-window integration and Slice J closeout + +## Outcome + +Slice J closed at `a9a822f206cc6021bc099988144488f3bd7c397b`. +The graphical client and direct no-window host now construct and borrow the +same `GameRuntime`, canonical gameplay owners, generation token, and retryable +generation-reset transaction. No gameplay model or GUID map was duplicated. + +Exact rollback: + +```text +git revert a9a822f206cc6021bc099988144488f3bd7c397b +``` + +## Canonical reset ownership + +`RuntimeGenerationReset` owns the exact-generation reset order for transit, +commands, containers, actions, movement, object tables, character, item mana, +social state, entity retirement, host-projection acknowledgement, canonical +entity completion, chat identity, snapshots, and player identity. + +The reset is a retained-cursor transaction: + +- completed stages never replay after a callback failure; +- entity retirement uses exact `RuntimeEntityKey` incarnations; +- canonical identity clears only after Runtime and host projections converge; +- duplicate completed reset is inert; +- re-entry or host replacement for an active generation is rejected. + +The graphical reset manifest invokes this transaction once and retains only +App presentation cleanup. `NoWindowGameRuntimeHost` invokes the same Runtime +transaction without loading App or a presentation backend. + +## Direct-host proof + +The deterministic no-window scenario covers: + +- connect, character selection, enter world, and outbound activation; +- entity/object/inventory/chat/vital/environment/movement state; +- movement, use, attack, cast, projectile, and portal operations; +- portal host acknowledgement; +- graceful stop, reconnect, stale-route rejection, and GUID reuse; +- reset retry/no-replay and portal cancellation before/after readiness; +- observer-failure containment; +- two simultaneous roots with isolated credentials, clocks, GUIDs, items, + chat, spells, projectiles, portals, and teardown; +- credential-safe traces with no password text; +- terminal zero ownership and backlog convergence. + +The direct test process loads no App, UI, renderer, audio, Silk.NET, OpenAL, +Arch, or ImGui assembly. + +## Retail chat-history decision + +The integrated reconnect trace retains the bounded chat transcript while +clearing active command targets and character identity. This matches the named +retail ownership: + +- `CPlayerSystem::OnEndCharacterSession` at `0x00562870` ends and begins the + character session. +- `ClientUISystem::OnEndCharacterSession` at `0x00564AD0` calls + `ClientUISystem::CleanUpGameUI` at `0x005648A0`. +- That cleanup clears trade, vendor, ground-container, and selection state; + it does not clear the chat buffer. +- Explicit `ClientCommunicationSystem::DoClear` at `0x0056E600` owns the + clear-chat-buffer notice. + +No reconnect-time chat purge was added. + +## Acceptance evidence + +- Runtime tests: 395/395. +- App tests: 3,731 pass / 3 intentional skips. +- Complete Release solution: 8,696 pass / 5 intentional skips. +- Connected lifecycle/reconnect: + `logs/connected-world-gate-20260727-004418/report.json`. +- Canonical nine-stop: + `logs/connected-r6-soak-20260727-004942.report.json`. +- J7's exact graphical visual matrix was accepted by the user on 2026-07-27. + +The connected routes exited gracefully with zero failures and no pending +publication, retirement, upload, warmup, or ownership backlog. Population- +sensitive object/particle counts and missing-DAT VFX diagnostics were recorded +but did not violate the route invariants. + +## Audits + +- Dependency closure: pass. +- Presentation/backend assembly isolation: pass. +- Duplicate canonical constructors/maps: none. +- Mutable process-wide session state: none introduced. +- Teardown ledger convergence: pass. +- Retail divergence register: no new behavioral divergence.