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