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>
88 lines
3.7 KiB
Markdown
88 lines
3.7 KiB
Markdown
# 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.
|