docs(runtime): close communication ownership

Record J4.1's single Runtime communication/social graph, failure-safe ordered chat stream, complete Release evidence, exact-binary lifecycle/reconnect acceptance, rollback, and the J4.2 inventory transaction boundary. Synchronize architecture, roadmap, milestones, agent guidance, and durable memory.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-26 07:59:02 +02:00
parent c9d25ade50
commit 595d5e6b01
9 changed files with 169 additions and 14 deletions

View file

@ -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

View file

@ -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:

View file

@ -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).

View file

@ -10,8 +10,9 @@ boundary and borrowed contract seam; J2 moved canonical session/transport
lifetime and ordered inbound routing; J3.1J3.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.

View file

@ -1,6 +1,6 @@
# Modern runtime Slice J — presentation-independent runtime
**Status:** J0J3 COMPLETE; J4 gameplay-state lifetime groups are active
**Status:** J0J3 COMPLETE; J4.1 COMPLETE; J4.2 inventory ownership active
**Parent:** `2026-07-24-modern-runtime-architecture.md`, Slice J
**Authorization:** the user approved Slices FL, 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:

View file

@ -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 FL, 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
```

View file

@ -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.