diff --git a/AGENTS.md b/AGENTS.md index 860ba21d..05640ee9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -239,7 +239,13 @@ disposal converge the complete ownership ledger to zero. Runtime tests pass 146/146, App tests pass 3,765/3 skips, the complete Release suite passes 8,484/5 skips, and both the exact lifecycle/reconnect and canonical nine-stop routes pass with graceful zero-code exits and no failures. J3 is closed; J4 -gameplay-state lifetime groups are active. J0's rollback is +gameplay-state lifetime groups are active. J4.1 is complete at `c9d25ade`: +`RuntimeCommunicationState` owns the exact chat transcript, reply/retell +targets, negotiated rooms, friends, and squelch state; graphical and no-window +consumers borrow them. Runtime tests pass 152/152, App tests pass 3,765/3 +skips, the complete Release suite passes 8,494/5 skips, and the exact-binary +seven-checkpoint lifecycle/reconnect gate passes with graceful exits and zero +failures. J4.2 inventory transaction ownership is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. @@ -256,13 +262,16 @@ J3.5's rollback is `git revert ce3ac310d92722ffb637e81cb1957458874dd220`. J3.6's rollback is `git revert 119b7c115107245546180b2f5cb3cb44c7d5476a`. +J4.1's rollback is +`git revert c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e`. 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 `docs/plans/2026-07-25-modern-runtime-slice-i.md`; the coherent Slice J campaign executes from `docs/plans/2026-07-25-modern-runtime-slice-j.md`; J3.6 closeout 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`. The exact G4 +`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`. 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 ca2e4df3..e6087d1b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -237,7 +237,13 @@ disposal converge the complete ownership ledger to zero. Runtime tests pass 146/146, App tests pass 3,765/3 skips, the complete Release suite passes 8,484/5 skips, and both the exact lifecycle/reconnect and canonical nine-stop routes pass with graceful zero-code exits and no failures. J3 is closed; J4 -gameplay-state lifetime groups are active. J0's rollback is +gameplay-state lifetime groups are active. J4.1 is complete at `c9d25ade`: +`RuntimeCommunicationState` owns the exact chat transcript, reply/retell +targets, negotiated rooms, friends, and squelch state; graphical and no-window +consumers borrow them. Runtime tests pass 152/152, App tests pass 3,765/3 +skips, the complete Release suite passes 8,494/5 skips, and the exact-binary +seven-checkpoint lifecycle/reconnect gate passes with graceful exits and zero +failures. J4.2 inventory transaction ownership is active. J0's rollback is `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. J1's rollback is `git revert 854d9e9cd13092bd5aaa3cf025d73eeb4600e9f8`. @@ -254,13 +260,16 @@ J3.5's rollback is `git revert ce3ac310d92722ffb637e81cb1957458874dd220`. J3.6's rollback is `git revert 119b7c115107245546180b2f5cb3cb44c7d5476a`. +J4.1's rollback is +`git revert c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e`. 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 `docs/plans/2026-07-25-modern-runtime-slice-i.md`; the coherent Slice J campaign executes from `docs/plans/2026-07-25-modern-runtime-slice-j.md`; J3.6 closeout 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`. The exact G4 +`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`. 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 10e2ad35..6448e465 100644 --- a/docs/architecture/acdream-architecture.md +++ b/docs/architecture/acdream-architecture.md @@ -217,7 +217,9 @@ src/ RuntimeEntityObjectViews.cs -> direct allocation-free borrowed views InboundPhysicsStateController.cs -> retail timestamp/snapshot authority ParentAttachmentState.cs -> generation-exact parent relations - -> J3 complete; J4 gameplay-state lifetime groups active + Gameplay/ + RuntimeCommunicationState.cs -> one chat/social owner + ordered stream + -> J3 and J4.1 complete; J4.2 inventory transaction ownership 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 fc93de3c..40a13c0e 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 is also closed; J4 gameplay-state lifetime groups 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 and J4.1 communication/social ownership are closed; J4.2 inventory transaction ownership 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. --- @@ -1710,8 +1710,13 @@ port in any phase — no separate listing here. > every incomplete teardown suffix, and converges the complete reset/disposal > ledger to zero. Its 146 Runtime tests, 3,765 App tests / 3 skips, 8,484-test > / 5-skip complete Release suite, exact lifecycle/reconnect gate, and -> canonical nine-stop route pass. J4 gameplay-state lifetime groups are -> active. +> canonical nine-stop route pass. J4.1 is complete at `c9d25ade`: Runtime +> constructs and owns the exact chat transcript, reply/retell targets, +> negotiated rooms, friends, and squelch state; every graphical and no-window +> consumer borrows them. Its 152 Runtime tests, 3,765 App tests / 3 skips, +> 8,494-test / 5-skip complete Release suite, and exact-binary +> seven-checkpoint lifecycle/reconnect gate pass. J4.2 inventory transaction +> ownership 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 e5d906a6..a2fe2a1a 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -187,8 +187,12 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I versions prevent displaced callbacks, and reset/direct disposal converge the complete owner ledger to zero. Its 146 Runtime tests, 3,765 App tests / 3 skips, 8,484 full Release tests / 5 skips, exact lifecycle/reconnect gate, - and canonical nine-stop route pass. J4 gameplay-state lifetime groups are - active under + and canonical nine-stop route pass. J4.1 is complete at `c9d25ade`: + Runtime owns one exact chat/social graph and its re-entrant-safe synchronous + event stream; all presentation and no-window consumers borrow it. Its 152 + Runtime tests, 3,765 App tests / 3 skips, 8,494 full Release tests / 5 + skips, and exact-binary seven-checkpoint lifecycle/reconnect route pass. + J4.2 inventory transaction ownership 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). diff --git a/docs/plans/2026-07-24-modern-runtime-architecture.md b/docs/plans/2026-07-24-modern-runtime-architecture.md index cee00279..814411e5 100644 --- a/docs/plans/2026-07-24-modern-runtime-architecture.md +++ b/docs/plans/2026-07-24-modern-runtime-architecture.md @@ -10,8 +10,9 @@ boundary and borrowed contract seam; J2 moved canonical session/transport lifetime and ordered inbound routing; J3.1–J3.6 moved canonical entity identity and object-table lifetime to Runtime, exact graphical projection identity to App, and one ordered canonical entity/object stream plus direct views to all -hosts and closed the failure-safe owner ledger. J4 gameplay-state lifetime -groups are the active execution point. +hosts and closed the failure-safe owner ledger. J4.1 moved communication and +social ownership into Runtime at `c9d25ade`; J4.2 inventory transaction +ownership 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 bd245c3c..9db3e5ee 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 gameplay-state lifetime groups are active +**Status:** J0–J3 COMPLETE; J4.1 COMPLETE; J4.2 inventory ownership 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 @@ -229,6 +229,14 @@ match current traces; App has no server-GUID ownership. Gate: deterministic command/response traces and graphical ViewModel revisions match; no Runtime type references UI abstractions. +J4.1 completed at `c9d25ade`: Runtime now owns the exact chat transcript, +reply/retell targets, negotiated Turbine rooms, friends, and squelch state. +Graphical UI, devtools, command routing, plugins/current-runtime projections, +and no-window consumers borrow that one graph. Its 152 Runtime tests, 3,765 +App tests / 3 skips, 8,494 complete Release tests / 5 skips, and exact-binary +seven-checkpoint lifecycle/reconnect gate pass. J4.2 inventory transaction +ownership 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 3d342cc4..70e7c9e1 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:** ACTIVE +**Status:** J4.1 COMPLETE; J4.2 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 @@ -17,6 +17,16 @@ UI, devtools, plugins, and the live-session router borrow those exact instances. Every moved group retains current synchronous packet/command ordering and its existing retail-derived algorithms. +## Execution ledger + +| Group | Status | Evidence | +|---|---|---| +| 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 | active | Runtime must borrow J3's exact object table and take ownership of external-container, item-mana, shortcut/component, shared busy, and one-request-at-a-time state | +| J4.3 magic/player sheet | pending | starts only after J4.2 exact-binary acceptance | +| J4.4 character projections | pending | starts only after J4.3 acceptance | +| J4.5 combined cleanup | pending | combined failure, no-window, connected, and nine-stop closeout | + ## Current ownership inventory The App `GameWindow` currently constructs or roots these @@ -60,6 +70,8 @@ environment, and portal presentation remain J6. ### J4.1 — communication and social state +**Completed 2026-07-26 at `c9d25ade`.** + - Add a Runtime owner for `ChatLog`, `TurbineChatState`, `FriendsState`, `SquelchState`, and reply/retell command targets. - Move reply/retell target tracking out of `ChatVM`; the VM borrows the same @@ -73,8 +85,19 @@ Gate: incoming/outgoing tell tracking, room negotiation/cookie wrap, friend and squelch updates, command routing, clear, reset/reconnect, graphical/direct event traces, disposal, and Runtime dependency closure. +Result: `RuntimeCommunicationState` constructs and owns the exact `ChatLog`, +reply/retell targets, Turbine rooms, friends, and squelch database. Session +routing, both UI stacks, plugins/current-runtime views, and command routing +borrow those instances. The canonical chat stream is synchronous, +failure-isolated, and preserves one monotonic sequence under re-entrant +callbacks without a frame/background queue. Exact-binary lifecycle/reconnect +evidence is recorded in +[`../research/2026-07-26-slice-j4-1-communication-state.md`](../research/2026-07-26-slice-j4-1-communication-state.md). + ### J4.2 — inventory transaction state +**Active.** + - Move `ExternalContainerState`, `ItemManaState`, shortcuts, and desired component snapshots into one Runtime owner. - Keep the J3 object table as the only item collection and borrow it directly. @@ -158,3 +181,9 @@ git revert 119b7c115107245546180b2f5cb3cb44c7d5476a ``` Do not revert J3 to mask a J4 owner/reset failure. + +J4.1 is independently reversible with: + +```text +git revert c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e +``` diff --git a/docs/research/2026-07-26-slice-j4-1-communication-state.md b/docs/research/2026-07-26-slice-j4-1-communication-state.md new file mode 100644 index 00000000..3c9ad423 --- /dev/null +++ b/docs/research/2026-07-26-slice-j4-1-communication-state.md @@ -0,0 +1,88 @@ +# Modern runtime J4.1 — communication/social ownership + +**Status:** COMPLETE +**Production commit:** `c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e` +**Parent plan:** `../plans/2026-07-26-modern-runtime-slice-j4.md` + +## Result + +`RuntimeCommunicationState` is the single presentation-independent owner for +the live chat transcript, reply/retell command targets, negotiated Turbine +rooms and context cookies, friends, and squelch database. + +The live-session router, client commands, retained retail UI, developer tools, +current-runtime/plugin boundary, and future no-window hosts borrow those exact +instances. `GameWindow` retains read-only compatibility aliases only; it no +longer constructs a communication or social state object. + +Reply/retell tracking moved out of `ChatVM`. A ViewModel may construct a +private tracker for isolated UI tests, while production ViewModels borrow the +Runtime tracker. Disposing one borrowed ViewModel cannot detach or reset the +shared command state. + +The Runtime chat stream subscribes once to the canonical `ChatLog`, assigns a +monotonic commit sequence, and dispatches synchronously. Its retained in-call +drain prevents a re-entrant callback from delivering a later entry to one +observer before an earlier entry. Observer exceptions are recorded and do not +starve later observers or roll back the committed transcript. No async queue, +polling mirror, or extra frame was introduced. + +Session reset preserves visible transcript history while independently +clearing reply/retell targets, local speaker identity and dedupe state, +negotiated rooms/cookie sequence, friends, and squelch state in the existing +retail-derived reset order. + +## Automated evidence + +- Runtime suite: 152 passed. +- App suite: 3,765 passed / 3 established skips. +- UI abstractions: 545 passed. +- Core: 3,294 passed / 2 established skips. +- Core.Net: 600 passed. +- Complete Release solution: 8,494 passed / 5 established skips. +- Release build: pass, zero errors. A clean rebuild reports 17 pre-existing + Core-test warnings; the J4.1 diff introduces none. +- `git diff --check`: pass. + +The focused matrix covers incoming/outgoing tells, shared ViewModel borrowing, +reset without transcript loss, duplicate subscription rejection, callback +re-entrancy, observer failure isolation, direct/idempotent disposal, two +independent Runtime instances, current-runtime event forwarding, UI +composition, and shutdown ordering. + +## Exact-binary connected evidence + +`logs/connected-world-gate-20260726-075109/report.json` passed on exact source +and embedded binary commit +`c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e`: + +- six capped checkpoints through login, outdoor/dungeon/facility travel and + revisit plus one fresh-process uncapped reconnect checkpoint; +- 245.687-second capped route and 61.638-second reconnect route; +- both sessions exited gracefully with code zero; +- zero failures, render-shadow mismatches, pending render deltas, or stranded + owner work. + +Its only warning is the established set of 25 expected world-edge landblock +misses. + +## Retail and divergence audit + +J4.1 changes ownership, observation, and teardown only. Existing retail-derived +chat parsing, formatting, channel cookies, friend updates, squelch rules, and +session-reset semantics are unchanged. No divergence row was added or retired. + +## Rollback + +```text +git revert c9d25ade50c0a5c4f7db5b6cca680e01e35cc18e +``` + +Do not revert J3 to mask a later gameplay-state ownership failure. + +## Next boundary + +J4.2 moves the external-container, item-mana, shortcut/component, shared busy, +and one-inventory-request-at-a-time owners into Runtime while borrowing J3's +exact `ClientObjectTable`. Retained drag/drop projections, icons, cursors, +selection, and panel state stay in App/UI.