diff --git a/AGENTS.md b/AGENTS.md index 76f75c07..52bb86de 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -256,8 +256,14 @@ exact coupled spellbook/local-player graph; content, routing, retained UI, reset, and shutdown borrow it, and the duplicate desired-component snapshot is deleted. Runtime tests pass 162/162, App tests pass 3,772/3 skips, the complete Release suite passes 8,522/5 skips, and the exact-binary seven-checkpoint -lifecycle/reconnect gate passes with graceful exits and zero failures. J4.4 -character projections are active. J0's rollback is +lifecycle/reconnect gate passes with graceful exits and zero failures. J4.4 is +complete at `dcb61efb`: Runtime owns character options and server run/jump +projections, exposes exact borrowed J4 gameplay views, and routes retained UI +plus future no-window state commands through one synchronous generation-gated +seam. Runtime tests pass 169/169, App tests pass 3,777/3 skips, the complete +Release suite passes 8,534/5 skips, and the exact-binary seven-checkpoint gate +passes with graceful exits and zero failures. J4.5 combined closeout is active. +J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. @@ -280,6 +286,8 @@ J4.2's rollback is `git revert 011efbeaa72509b35ea7f4a442e50a2377ae1ea4`. J4.3's rollback is `git revert d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6`. +J4.4's rollback is +`git revert dcb61efb5af6c12bd619369e28cf11bacc37bc73`. 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 @@ -289,7 +297,8 @@ is `docs/research/2026-07-26-slice-j3-6-lifetime-closeout.md`; J4 executes from `docs/plans/2026-07-26-modern-runtime-slice-j4.md`; J4.1 closeout is `docs/research/2026-07-26-slice-j4-1-communication-state.md`; J4.2 closeout is `docs/research/2026-07-26-slice-j4-2-inventory-state.md`; J4.3 closeout is -`docs/research/2026-07-26-slice-j4-3-character-state.md`. The exact G4 +`docs/research/2026-07-26-slice-j4-3-character-state.md`; J4.4 closeout is +`docs/research/2026-07-26-slice-j4-4-character-projections.md`. The exact G4 visual rollback is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or the portal-warmup corrections. Evidence: diff --git a/CLAUDE.md b/CLAUDE.md index f3f249c9..fb0934e3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -254,8 +254,14 @@ exact coupled spellbook/local-player graph; content, routing, retained UI, reset, and shutdown borrow it, and the duplicate desired-component snapshot is deleted. Runtime tests pass 162/162, App tests pass 3,772/3 skips, the complete Release suite passes 8,522/5 skips, and the exact-binary seven-checkpoint -lifecycle/reconnect gate passes with graceful exits and zero failures. J4.4 -character projections are active. J0's rollback is +lifecycle/reconnect gate passes with graceful exits and zero failures. J4.4 is +complete at `dcb61efb`: Runtime owns character options and server run/jump +projections, exposes exact borrowed J4 gameplay views, and routes retained UI +plus future no-window state commands through one synchronous generation-gated +seam. Runtime tests pass 169/169, App tests pass 3,777/3 skips, the complete +Release suite passes 8,534/5 skips, and the exact-binary seven-checkpoint gate +passes with graceful exits and zero failures. J4.5 combined closeout is active. +J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. @@ -278,6 +284,8 @@ J4.2's rollback is `git revert 011efbeaa72509b35ea7f4a442e50a2377ae1ea4`. J4.3's rollback is `git revert d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6`. +J4.4's rollback is +`git revert dcb61efb5af6c12bd619369e28cf11bacc37bc73`. 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 @@ -287,7 +295,8 @@ is `docs/research/2026-07-26-slice-j3-6-lifetime-closeout.md`; J4 executes from `docs/plans/2026-07-26-modern-runtime-slice-j4.md`; J4.1 closeout is `docs/research/2026-07-26-slice-j4-1-communication-state.md`; J4.2 closeout is `docs/research/2026-07-26-slice-j4-2-inventory-state.md`; J4.3 closeout is -`docs/research/2026-07-26-slice-j4-3-character-state.md`. The exact G4 +`docs/research/2026-07-26-slice-j4-3-character-state.md`; J4.4 closeout is +`docs/research/2026-07-26-slice-j4-4-character-projections.md`. The exact G4 visual rollback is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or the portal-warmup corrections. Evidence: diff --git a/docs/architecture/acdream-architecture.md b/docs/architecture/acdream-architecture.md index 58466f61..b5b9ab87 100644 --- a/docs/architecture/acdream-architecture.md +++ b/docs/architecture/acdream-architecture.md @@ -205,8 +205,9 @@ src/ AcDream.Runtime/ presentation-independent client kernel boundary RuntimeAssemblyMarker.cs -> J0 dependency boundary - GameRuntime*.cs -> J1 borrowed views, synchronous commands, - ordered deltas, clock, generation + teardown + GameRuntime*.cs -> J1/J4 borrowed views, synchronous commands, + ordered deltas/checkpoints, clock, + generation + teardown Session/ -> J2 canonical session lifetime, ordered inbound routing + retryable teardown Entities/ @@ -221,8 +222,9 @@ src/ RuntimeCommunicationState.cs -> one chat/social owner + ordered stream RuntimeInventoryState.cs -> exact object-table borrower + inventory transaction/session-state owner - RuntimeCharacterState.cs -> coupled spellbook/local-player owner - -> J3 and J4.1–J4.3 complete; J4.4 character projections active + RuntimeCharacterState.cs -> coupled spellbook/local-player plus + character-option/run-jump owner + -> J3 and J4.1–J4.4 complete; J4.5 combined closeout 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 11790514..4594e362 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-26. **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's canonical entity/object lifetime plus J4.1 communication/social, J4.2 inventory-transaction, and J4.3 magic/player-sheet ownership are closed; J4.4 character projections are active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate. +**Status:** Living document. Updated 2026-07-26. **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's canonical entity/object lifetime plus J4.1 communication/social, J4.2 inventory-transaction, J4.3 magic/player-sheet, and J4.4 character projection/typed-command ownership are closed; J4.5 combined closeout 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. --- @@ -1726,7 +1726,13 @@ port in any phase — no separate listing here. > borrow it, and the duplicate desired-component snapshot is deleted. Its 162 > Runtime tests, 3,772 App tests / 3 skips, 8,522-test / 5-skip complete > Release suite, and exact-binary seven-checkpoint lifecycle/reconnect gate -> pass. J4.4 character projections are active. +> pass. J4.4 is complete at `dcb61efb`: Runtime owns character options and +> server run/jump projections, exposes the exact borrowed J4 inventory, +> character, and social views, and routes graphical/no-window state commands +> through one synchronous generation-gated seam. Its 169 Runtime tests, 3,777 +> App tests / 3 skips, 8,534-test / 5-skip complete Release suite, and +> exact-binary seven-checkpoint lifecycle/reconnect gate pass. J4.5 combined +> failure, parity, teardown, connected, and nine-stop closeout 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 5cd58465..eb4a1e5f 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -201,8 +201,13 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I spellbook/local-player graph, content and presentation borrow it, and the duplicate desired-component snapshot is deleted. Its 162 Runtime tests, 3,772 App tests / 3 skips, 8,522 full Release tests / 5 skips, and - exact-binary seven-checkpoint lifecycle/reconnect route pass. J4.4 character - projections are active under + exact-binary seven-checkpoint lifecycle/reconnect route pass. J4.4 is + complete at `dcb61efb`: Runtime owns character options and server run/jump + projections, exposes exact borrowed J4 gameplay views, and routes retained + UI/future no-window state commands through one synchronous generation-gated + seam. Its 169 Runtime tests, 3,777 App tests / 3 skips, 8,534 full Release + tests / 5 skips, and exact-binary seven-checkpoint lifecycle/reconnect route + pass. J4.5 combined closeout 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). @@ -220,6 +225,8 @@ Slice-J3.6 closeout evidence is [`../research/2026-07-26-slice-j3-6-lifetime-closeout.md`](../research/2026-07-26-slice-j3-6-lifetime-closeout.md). Slice-J4.3 closeout evidence is [`../research/2026-07-26-slice-j4-3-character-state.md`](../research/2026-07-26-slice-j4-3-character-state.md). +Slice-J4.4 closeout evidence is +[`../research/2026-07-26-slice-j4-4-character-projections.md`](../research/2026-07-26-slice-j4-4-character-projections.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 4b8389f0..222c451d 100644 --- a/docs/plans/2026-07-24-modern-runtime-architecture.md +++ b/docs/plans/2026-07-24-modern-runtime-architecture.md @@ -13,8 +13,9 @@ App, and one ordered canonical entity/object stream plus direct views to all hosts and closed the failure-safe owner ledger. J4.1 moved communication and social ownership into Runtime at `c9d25ade`; J4.2 moved inventory transaction ownership into Runtime at `011efbea`; J4.3 moved the coupled magic/player-sheet -owner into Runtime at `d02a12ce`; J4.4 character projections are the active -execution point. +owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections +and the shared typed state-command seam at `dcb61efb`; J4.5 combined closeout +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. 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 4a52268b..c4d8520d 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–J3 COMPLETE; J4.1–J4.3 COMPLETE; J4.4 character projections active +**Status:** J0–J3 COMPLETE; J4.1–J4.4 COMPLETE; J4.5 combined closeout 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 @@ -244,8 +244,13 @@ lifecycle/reconnect gate pass. J4.3 completed at `d02a12ce`: content, routing, retained UI, reset, and shutdown borrow it, and the duplicate desired-component snapshot is gone. Its 162 Runtime tests, 3,772 App tests / 3 skips, 8,522 complete Release tests / 5 skips, and exact-binary -seven-checkpoint lifecycle/reconnect gate pass. J4.4 character projections are -active. +seven-checkpoint lifecycle/reconnect gate pass. J4.4 completed at `dcb61efb`: +Runtime owns character options and server run/jump projections, exposes exact +borrowed J4 gameplay views, and routes retained UI plus future no-window hosts +through one synchronous generation-gated state-command seam. Its 169 Runtime +tests, 3,777 App tests / 3 skips, 8,534 complete Release tests / 5 skips, and +exact-binary seven-checkpoint lifecycle/reconnect gate pass. J4.5 combined +failure, parity, teardown, connected, and nine-stop closeout is active. Detailed execution begins with a source-ownership inventory. Move one coherent lifetime group at a time in this order: diff --git a/docs/plans/2026-07-26-modern-runtime-slice-j4.md b/docs/plans/2026-07-26-modern-runtime-slice-j4.md index 147a0ef6..a6c2cbdb 100644 --- a/docs/plans/2026-07-26-modern-runtime-slice-j4.md +++ b/docs/plans/2026-07-26-modern-runtime-slice-j4.md @@ -1,6 +1,6 @@ # Modern runtime Slice J4 — gameplay-state lifetime groups -**Status:** J4.1–J4.3 COMPLETE; J4.4 ACTIVE +**Status:** J4.1–J4.4 COMPLETE; J4.5 ACTIVE **Parent:** `2026-07-25-modern-runtime-slice-j.md`, J4 **Production base:** `77c013998b902724d66e487589a4ea18538e1ea6` **Authorization:** the user approved Slices F–L, including Slice J gameplay @@ -24,8 +24,8 @@ ordering and its existing retail-derived algorithms. | J4.1 communication/social | complete | `c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e`; 152 Runtime tests, 3,765 App tests / 3 skips, 8,494 complete Release tests / 5 skips, and `logs/connected-world-gate-20260726-075109/report.json` pass | | J4.2 inventory transactions | complete | `011efbeaa72509b35ea7f4a442e50a2377ae1ea4`; 157 Runtime tests, 3,770 App tests / 3 skips, 8,515 complete Release tests / 5 skips, and `logs/connected-world-gate-20260726-082057/report.json` pass | | J4.3 magic/player sheet | complete | `d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6`; 162 Runtime tests, 3,772 App tests / 3 skips, 8,522 complete Release tests / 5 skips, and `logs/connected-world-gate-20260726-083921/report.json` pass | -| J4.4 character projections | active | move remaining character options/skill-derived state and expose the borrowed J4 view/command surface | -| J4.5 combined cleanup | pending | combined failure, no-window, connected, and nine-stop closeout | +| J4.4 character projections | complete | `dcb61efb5af6c12bd619369e28cf11bacc37bc73`; 169 Runtime tests, 3,777 App tests / 3 skips, 8,534 complete Release tests / 5 skips, and `logs/connected-world-gate-20260726-091340/report.json` pass | +| J4.5 combined cleanup | active | combined failure, no-window, connected, and nine-stop closeout | ## Current ownership inventory @@ -144,6 +144,8 @@ only mutable component-count owner. Exact evidence is recorded in ### J4.4 — character settings and player-state projections +**Completed 2026-07-26 at `dcb61efb`.** + - Move remaining presentation-independent character options and skill-derived state needed by commands/bots. - Keep controller/body/camera/input application in App/J5. @@ -153,6 +155,14 @@ only mutable component-count owner. Exact evidence is recorded in Gate: character replacement, settings isolation, two Runtime instances in one process, no static mutable session state, and no backend load. +Result: the Runtime character graph owns both option bitfields and the +server-authoritative run/jump projection; the two former App owners are +deleted. Exact borrowed inventory/character/social views and synchronous +generation-gated state commands are shared by graphical UI and future +no-window hosts. Normalized checkpoints now cover the J4 state. Exact evidence +is recorded in +[`../research/2026-07-26-slice-j4-4-character-projections.md`](../research/2026-07-26-slice-j4-4-character-projections.md). + ### J4.5 — combined cleanup and closeout - Delete temporary App owner fields, reset branches, reconstructed runtime @@ -216,3 +226,9 @@ J4.3 is independently reversible with: ```text git revert d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6 ``` + +J4.4 is independently reversible with: + +```text +git revert dcb61efb5af6c12bd619369e28cf11bacc37bc73 +``` diff --git a/docs/research/2026-07-26-slice-j4-4-character-projections.md b/docs/research/2026-07-26-slice-j4-4-character-projections.md new file mode 100644 index 00000000..dcb45f8d --- /dev/null +++ b/docs/research/2026-07-26-slice-j4-4-character-projections.md @@ -0,0 +1,117 @@ +# Modern runtime J4.4 — character projections and typed state commands + +**Status:** COMPLETE +**Production commit:** `dcb61efb5af6c12bd619369e28cf11bacc37bc73` +**Parent plan:** `../plans/2026-07-26-modern-runtime-slice-j4.md` + +## Result + +`RuntimeCharacterState` now owns the remaining presentation-independent local +character state: both character-option bitfields and the server-authoritative +run/jump skill projection. The App-owned `PlayerCharacterOptionsState` and +`LocalPlayerSkillState` were deleted. The graphical movement controller +borrows and applies the Runtime values when its body is constructed or +reconstructed. + +The current-runtime boundary exposes borrowed, immutable projections over the +exact J4 owners: + +- inventory request/busy state, complete item-or-spell shortcuts, and item + mana; +- character options, movement skills, vitals, attributes, skills, learned + spells, favorites, filters, desired components, enchantment counts, and + revisions; +- friends, squelch counts/revisions, and negotiated chat-room state. + +Synchronous, generation-gated typed commands now cover shortcut mutation, +spell favorites/filter/forget/component preferences, advancement, character +options, friends, and squelch. The retained graphical UI uses this same seam. +The adapter publishes into the existing generation-scoped `ICommandBus`; the +exact live-session router performs the established `WorldSession` sends and +becomes inert before session detachment. No asynchronous queue, second state +collection, or extra frame was introduced. + +Normalized checkpoints now include J4 inventory, character, and social +revisions/counts, so later graphical-versus-no-window parity gates cannot pass +while ignoring the newly exposed state. + +## Retail basis + +J4.4 changes ownership and command routing, not game behavior. The retained +defaults come from the named retail client: + +```text +PlayerModule::PlayerModule @ 0x005D51F0 + options_ = 0x50C4A54A + options2_ = 0x00948700 + spell_filters_ = 0x00003FFF +``` + +`PlayerModule::Clear @ 0x005D48A0` clears the per-character shortcut, +desired-component, generic-option, and gameplay-option objects. Because one +modern Runtime owner survives successive character sessions, its session reset +restores the equivalent freshly constructed option bitfields. Existing +PlayerDescription replacement and `SetCharacterOptions (0x01A1)` packing are +unchanged. + +Controller/body/camera/input application remains in App and is intentionally +outside J4; J5 owns that later boundary. + +## Automated evidence + +- Runtime suite: 169 passed. +- App suite: 3,777 passed / 3 established skips. +- Core suite: 3,305 passed / 2 established skips. +- Core.Net suite: 600 passed. +- UI abstractions: 545 passed. +- Content: 119 passed. +- Bake: 15 passed. +- CLI: 4 passed. +- Complete Release solution: 8,534 passed / 5 established skips. +- Release build: pass, zero warnings and zero errors on the final incremental + build. +- `git diff --check`: pass. + +Focused coverage proves the retail defaults, partial run/jump updates, +character replacement/reset, full item and spell shortcut observation, +borrowed owner identity, typed command/generation routing, displaced-session +inertness, normalized checkpoint coverage, two independent Runtime instances, +absence of static mutable session state, and deletion of both App owner paths. + +## Exact-binary connected evidence + +`logs/connected-world-gate-20260726-091340/report.json` passed on exact source +and embedded binary commit +`dcb61efb5af6c12bd619369e28cf11bacc37bc73`: + +- six capped checkpoints through login, outdoor/dungeon/facility travel and + revisit plus one fresh-process uncapped reconnect checkpoint; +- 243.602-second capped route and 61.262-second reconnect route; +- both sessions exited gracefully with code zero; +- zero failures, render-shadow mismatches, pending deltas, or stranded owner + work. + +Its only warning is the established set of 25 expected world-edge landblock +misses. + +## Divergence audit + +The slice preserves existing retail-derived packet order, option defaults, +movement-skill application, and command builders while changing only lifetime +ownership and the host boundary. No divergence row was added or retired. + +## Rollback + +```text +git revert dcb61efb5af6c12bd619369e28cf11bacc37bc73 +``` + +Revert J4.4 before J4.3 if the gameplay-state groups must be unwound. Do not +revert J3's canonical entity/object ownership to mask a J4 state or command +failure. + +## Next boundary + +J4.5 removes the remaining compatibility paths, proves graphical and +no-window command/state parity under injected failures, and runs the combined +Release, connected lifecycle/reconnect, and canonical nine-stop closeout.