Record J4.4's canonical character settings, borrowed gameplay views, typed state-command seam, complete Release evidence, exact-binary lifecycle/reconnect acceptance, rollback, and the J4.5 combined closeout boundary. Synchronize architecture, roadmap, milestones, agent guidance, and durable memory. Co-authored-by: Codex <codex@openai.com>
4.6 KiB
Modern runtime J4.4 — character projections and typed state commands
Status: COMPLETE
Production commit: dcb61efb5af6c12bd619369e28cf11bacc37bc73
Parent plan: ../plans/2026-07-26-modern-runtime-slice-j4.md
Result
RuntimeCharacterState now owns the remaining presentation-independent local
character state: both character-option bitfields and the server-authoritative
run/jump skill projection. The App-owned PlayerCharacterOptionsState and
LocalPlayerSkillState were deleted. The graphical movement controller
borrows and applies the Runtime values when its body is constructed or
reconstructed.
The current-runtime boundary exposes borrowed, immutable projections over the exact J4 owners:
- inventory request/busy state, complete item-or-spell shortcuts, and item mana;
- character options, movement skills, vitals, attributes, skills, learned spells, favorites, filters, desired components, enchantment counts, and revisions;
- friends, squelch counts/revisions, and negotiated chat-room state.
Synchronous, generation-gated typed commands now cover shortcut mutation,
spell favorites/filter/forget/component preferences, advancement, character
options, friends, and squelch. The retained graphical UI uses this same seam.
The adapter publishes into the existing generation-scoped ICommandBus; the
exact live-session router performs the established WorldSession sends and
becomes inert before session detachment. No asynchronous queue, second state
collection, or extra frame was introduced.
Normalized checkpoints now include J4 inventory, character, and social revisions/counts, so later graphical-versus-no-window parity gates cannot pass while ignoring the newly exposed state.
Retail basis
J4.4 changes ownership and command routing, not game behavior. The retained defaults come from the named retail client:
PlayerModule::PlayerModule @ 0x005D51F0
options_ = 0x50C4A54A
options2_ = 0x00948700
spell_filters_ = 0x00003FFF
PlayerModule::Clear @ 0x005D48A0 clears the per-character shortcut,
desired-component, generic-option, and gameplay-option objects. Because one
modern Runtime owner survives successive character sessions, its session reset
restores the equivalent freshly constructed option bitfields. Existing
PlayerDescription replacement and SetCharacterOptions (0x01A1) packing are
unchanged.
Controller/body/camera/input application remains in App and is intentionally outside J4; J5 owns that later boundary.
Automated evidence
- Runtime suite: 169 passed.
- App suite: 3,777 passed / 3 established skips.
- Core suite: 3,305 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,534 passed / 5 established skips.
- Release build: pass, zero warnings and zero errors on the final incremental build.
git diff --check: pass.
Focused coverage proves the retail defaults, partial run/jump updates, character replacement/reset, full item and spell shortcut observation, borrowed owner identity, typed command/generation routing, displaced-session inertness, normalized checkpoint coverage, two independent Runtime instances, absence of static mutable session state, and deletion of both App owner paths.
Exact-binary connected evidence
logs/connected-world-gate-20260726-091340/report.json passed on exact source
and embedded binary commit
dcb61efb5af6c12bd619369e28cf11bacc37bc73:
- six capped checkpoints through login, outdoor/dungeon/facility travel and revisit plus one fresh-process uncapped reconnect checkpoint;
- 243.602-second capped route and 61.262-second reconnect route;
- both sessions exited gracefully with code zero;
- zero failures, render-shadow mismatches, pending deltas, or stranded owner work.
Its only warning is the established set of 25 expected world-edge landblock misses.
Divergence audit
The slice preserves existing retail-derived packet order, option defaults, movement-skill application, and command builders while changing only lifetime ownership and the host boundary. No divergence row was added or retired.
Rollback
git revert dcb61efb5af6c12bd619369e28cf11bacc37bc73
Revert J4.4 before J4.3 if the gameplay-state groups must be unwound. Do not revert J3's canonical entity/object ownership to mask a J4 state or command failure.
Next boundary
J4.5 removes the remaining compatibility paths, proves graphical and no-window command/state parity under injected failures, and runs the combined Release, connected lifecycle/reconnect, and canonical nine-stop closeout.