123 lines
5.2 KiB
Markdown
123 lines
5.2 KiB
Markdown
# 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 `ClientObjectTable` focused 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:
|
|
|
|
```text
|
|
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.
|