docs(runtime): close character projections
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>
This commit is contained in:
parent
dcb61efb5a
commit
ce6fae7b38
9 changed files with 194 additions and 22 deletions
117
docs/research/2026-07-26-slice-j4-4-character-projections.md
Normal file
117
docs/research/2026-07-26-slice-j4-4-character-projections.md
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
# 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:
|
||||
|
||||
```text
|
||||
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
|
||||
|
||||
```text
|
||||
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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue