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>
5 KiB
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.
RuntimeInventoryStateowns the one 18-slotShortcutStoreand the one inventory transaction/busy owner over J3's canonicalClientObjectTable.RuntimeCharacterStateowns favorite spells, spellbook filters, and desired component levels on its exactSpellbook.- Retained toolbar and spell controllers initiate typed Runtime commands; they no longer construct or reconstruct another mutable shortcut, favorite, or component collection.
ItemInteractionControllerrequires the Runtime-ownedInventoryTransactionState; its compatibility fallback and ownership flag are deleted.- One allocation-free
RuntimeGameplayOwnershipSnapshotcovers 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.
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
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.