5.2 KiB
Modern runtime J3.6 — canonical lifetime closeout
Status: COMPLETE
Production commit: 119b7c115107245546180b2f5cb3cb44c7d5476a
Parent plan: ../plans/2026-07-26-modern-runtime-slice-j3-hardening.md
Result
J3 now has one failure-safe entity/object lifetime from canonical Runtime registration through graphical projection, accepted mutation, authoritative delete, session clear, and direct disposal.
RuntimeEntityObjectLifetime retains the exact active or teardown receipt
before invoking fallible host callbacks. A callback can therefore fail,
delete/recreate the same GUID, clear the session, or commit a newer mutation
without making an owner unreachable or applying an older callback to a newer
incarnation.
The shared entity/object stream retains a synchronous in-call drain for re-entrant commits. This is not a background or cross-frame queue: the outer commit still completes synchronously, but every observer sees one monotonic sequence even when an earlier observer commits another fact while dispatch is in progress.
Per-channel mutation versions protect ObjDesc, motion, vector, state, position, parent, pickup, rebucket, withdrawal, and child-NoDraw callbacks. Rejected or stale work consumes no sequence. A graphical acknowledgement failure cannot erase an already committed canonical fact.
Direct disposal now executes the same retryable clear/retirement transaction as session shutdown, detaches borrowers, and requires the complete ownership ledger to converge before the stream is disposed.
Ownership ledger
The closeout snapshot covers:
- active and retained-teardown Runtime records and claimed local IDs;
- accepted snapshots/timestamps, parent relations, and operation versions;
- live object-table objects, containers, equipment owners, and pending moves;
- Runtime stream subscribers, dispatch failures, and synchronous drain state;
- exact-key App projections, spatial residence, presentation resources, effects, lights, scripts, projectiles, shadows, and equipped children.
Stable delete, reset, GUID reuse, and disposal fixtures require every field in that ledger to equal zero. Retained receipts are permitted only while an injected failure remains incomplete; retry or disposal must retire them exactly once.
Automated evidence
- Runtime lifetime/stream suite: 146 passed.
- Core
ClientObjectTablefocused suite: 86 passed. - Core.Net object-table wiring suite: 7 passed.
- Focused App ownership, hydration, projection, adapter, and stress matrix: 161 passed.
- Complete App suite: 3,765 passed / 3 established skips.
- Complete Release solution: 8,484 passed / 5 established skips.
- Release build: pass, zero errors. A clean rebuild reports 17 pre-existing Core test warnings; the J3.6 production diff introduces none.
git diff --check: pass.
The failure matrix covers registration/hydration failure, callback failure after commit, same-channel and cross-domain re-entrancy, rejected updates, optimistic object moves and rollback, authoritative removal, replacement, clear, delete/recreate, live direct disposal, and 96-owner churn/delete/reuse/reset cleanup.
Exact-binary connected evidence
logs/connected-world-gate-20260726-071554/report.json passed on
119b7c115107245546180b2f5cb3cb44c7d5476a:
- six capped checkpoints and one fresh-process uncapped reconnect checkpoint;
- 244.146-second capped route and 61.734-second reconnect route;
- two graceful server-confirmed exits with code zero;
- zero failures, render-shadow mismatches, pending render deltas, live teardowns, retirements, staged uploads, or composite warmup.
Its one warning is the route's established 25 world-edge empty-landblock probes.
logs/connected-r6-soak-20260726-072153.report.json also passed on the exact
same source and embedded binary commit:
- all nine canonical world checkpoints and 18 movement/turn samples;
- Caul, Sawato, Rynthid, Aerlinthe, Sawato revisit, Holtburg, Caul return, Sawato plateau, and Caul plateau;
- movement, jump, combat, repeated-location, portal, and long-lived churn exercises;
- 515.229 seconds total, graceful exit, code zero, and zero failures;
- zero render-scene mismatches, pending render deltas, live teardowns, landblock retirements, staged uploads, or streaming backlog at the final checkpoint.
The route's warnings are its population-sensitive revisit observations, known DAT-driven missing VFX diagnostics, and established world-edge probes. They are not invariant failures and do not identify a J3 ownership leak.
Retail and divergence audit
J3.6 hardens commit, observation, retry, and teardown boundaries only. It does not alter an AC packet, timestamp rule, object-table rule, gameplay algorithm, visual path, input timing, or intended retail divergence. No divergence register row was added or retired.
Rollback
Revert J3.6 only:
git revert 119b7c115107245546180b2f5cb3cb44c7d5476a
Do not revert J3.5, J3.4, or J3.3 to mask a later gameplay-owner regression.
Next boundary
J4 is active. Move chat, inventory/gameplay transactions, magic/effects, vitals/advancement, and cooldown state as coherent lifetime groups into Runtime. Each group must preserve the current graphical trace, expose the same borrowed state to no-window hosts, and delete its superseded App ownership before the next group begins.