Record J4.5 canonical shortcut and spellbook command ownership, combined failure and graphical/headless parity evidence, the 8,544-test Release gate, exact-binary lifecycle and nine-stop acceptance, rollback instructions, and the J5 boundary. Co-authored-by: Codex <noreply@openai.com>
118 lines
5 KiB
Markdown
118 lines
5 KiB
Markdown
# Modern runtime J4.5 — gameplay-state closeout
|
|
|
|
**Status:** COMPLETE
|
|
**Production commit:** `89e6b207f81946b40c38c8dc6597817ad99fc6e0`
|
|
**Parent plan:** `../plans/2026-07-26-modern-runtime-slice-j4.md`
|
|
|
|
## Result
|
|
|
|
J4 now has one presentation-independent owner for every gameplay-state group
|
|
in its scope. Graphical UI, current-runtime/plugin projections, and future
|
|
no-window hosts borrow the exact Runtime instances.
|
|
|
|
- `RuntimeInventoryState` owns the one 18-slot `ShortcutStore` and the one
|
|
inventory transaction/busy owner over J3's canonical `ClientObjectTable`.
|
|
- `RuntimeCharacterState` owns favorite spells, spellbook filters, and desired
|
|
component levels on its exact `Spellbook`.
|
|
- Retained toolbar and spell controllers initiate typed Runtime commands; they
|
|
no longer construct or reconstruct another mutable shortcut, favorite, or
|
|
component collection.
|
|
- `ItemInteractionController` requires the Runtime-owned
|
|
`InventoryTransactionState`; its compatibility fallback and ownership flag
|
|
are deleted.
|
|
- One allocation-free `RuntimeGameplayOwnershipSnapshot` covers inventory,
|
|
character, and communication owner/subscriber convergence.
|
|
|
|
The command seam preserves the named-retail local/send order:
|
|
|
|
- toolbar shortcut add/remove sends first and then mutates `PlayerModule`;
|
|
- favorite add/remove and filter changes mutate locally before sending;
|
|
- desired-component set/clear sends first and then mutates locally;
|
|
- an explicit desired-component value of zero remains an entry until the
|
|
complete list is cleared.
|
|
|
|
The retail trace and pseudocode are recorded in
|
|
[`2026-07-26-slice-j4-5-retail-local-command-order.md`](2026-07-26-slice-j4-5-retail-local-command-order.md).
|
|
|
|
## Failure and parity evidence
|
|
|
|
- Graphical command adapters and direct no-window owner commands produce equal
|
|
inventory/character snapshots, revisions, shortcuts, favorites, filters,
|
|
and desired-component values.
|
|
- Invalid and stale-generation commands neither publish nor mutate.
|
|
- Outbound exceptions preserve retail's already-committed local side of each
|
|
operation.
|
|
- A failing UI/subscriber callback cannot skip another observer or strand a
|
|
half-disposed Runtime root. Terminal disposal reports the failure only after
|
|
every owned suffix has run and the combined ledger has converged.
|
|
- Two independent Runtime graphs remain isolated and Runtime's dependency
|
|
closure loads no App, UI, Silk.NET, OpenAL, Arch, or ImGui assembly.
|
|
|
|
## Automated evidence
|
|
|
|
- Runtime suite: 175 passed.
|
|
- App suite: 3,780 passed / 3 established skips.
|
|
- Core suite: 3,306 passed / 2 established skips.
|
|
- Core.Net suite: 600 passed.
|
|
- UI abstractions: 545 passed.
|
|
- Content: 119 passed.
|
|
- Bake: 15 passed.
|
|
- CLI: 4 passed.
|
|
- Complete Release solution: 8,544 passed / 5 established skips.
|
|
- Final incremental Release build: zero warnings and zero errors.
|
|
- `git diff --check`: pass.
|
|
|
|
## Exact-binary connected evidence
|
|
|
|
`logs/connected-world-gate-20260726-095654/report.json` passed on exact source
|
|
and embedded binary
|
|
`89e6b207f81946b40c38c8dc6597817ad99fc6e0`:
|
|
|
|
- six capped login/outdoor/dungeon/facility/revisit checkpoints;
|
|
- one fresh-process uncapped reconnect checkpoint;
|
|
- 247.294-second capped route and 61.424-second reconnect route;
|
|
- both clients exited gracefully with code zero;
|
|
- zero failures, render-shadow mismatches, pending deltas, or stranded owner
|
|
work.
|
|
|
|
`logs/connected-r6-soak-20260726-100235.report.json` passed on the same exact
|
|
source/binary commit:
|
|
|
|
- all nine Caul/Sawato/Rynthid/Aerlinthe/Holtburg/revisit/plateau checkpoints;
|
|
- camera-turn samples at every location and movement/jump/combat exercises at
|
|
Caul, Holtburg, and Caul return;
|
|
- 515.083 seconds, graceful code-zero exit, zero failures, and
|
|
`BinaryMatchesSource=true`.
|
|
|
|
Its six warnings are the established live-world diagnostics: small
|
|
authoritative/transient entity, particle, script, and retained cache
|
|
differences at the Caul plateau, 32 missing DAT VFX messages, and 25 expected
|
|
world-edge empty-landblock misses. None is a J4 ownership failure.
|
|
|
|
An earlier post-commit run was deliberately discarded before acceptance when
|
|
the soak harness proved its executable still carried the prior commit stamp.
|
|
The retained gates above ran only after a clean App rebuild and exact
|
|
source/binary identity verification.
|
|
|
|
## Divergence audit
|
|
|
|
J4.5 changes ownership and faithfully ports existing local command ordering.
|
|
It introduces no gameplay approximation, asynchronous command queue, or
|
|
presentation difference. No divergence-register row was added or retired.
|
|
|
|
## Rollback
|
|
|
|
```text
|
|
git revert 89e6b207f81946b40c38c8dc6597817ad99fc6e0
|
|
```
|
|
|
|
Revert J4.5 before J4.4 when unwinding gameplay-state extraction. Do not
|
|
revert J3's canonical entity/object lifetime to mask a J4 command or teardown
|
|
failure.
|
|
|
|
## Next boundary
|
|
|
|
J5 moves presentation-free movement, physics, selection/approach/use, combat
|
|
intent, projectiles, and outbound cadence by coherent lifetime groups. Camera,
|
|
input devices, selection graphics, combat/spell bars, animated poses, sound,
|
|
particles, and all retained UI remain in App.
|