docs(runtime): close magic and player ownership
Record J4.3's coupled Runtime character graph, desired-component single ownership, complete Release evidence, exact-binary lifecycle/reconnect acceptance, rollback, and the J4.4 projection boundary. Synchronize architecture, roadmap, milestones, agent guidance, and durable memory. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
d02a12ceac
commit
9d0d9b07e0
9 changed files with 175 additions and 15 deletions
107
docs/research/2026-07-26-slice-j4-3-character-state.md
Normal file
107
docs/research/2026-07-26-slice-j4-3-character-state.md
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
# Modern runtime J4.3 — magic and player-sheet ownership
|
||||
|
||||
**Status:** COMPLETE
|
||||
**Production commit:** `d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6`
|
||||
**Parent plan:** `../plans/2026-07-26-modern-runtime-slice-j4.md`
|
||||
|
||||
## Result
|
||||
|
||||
`RuntimeCharacterState` is the single presentation-independent owner for the
|
||||
coupled `Spellbook` and `LocalPlayerState`. The coupling is structural:
|
||||
vital-max calculations read active enchantments from that exact spellbook, so
|
||||
the two objects cannot be independently replaced or reconstructed by a host.
|
||||
|
||||
The Runtime live-session router, App content loader, retained UI, developer
|
||||
tools, command routing, reset manifest, shutdown transaction, and future
|
||||
no-window host all borrow this one graph. `GameWindow` retains read-only
|
||||
compatibility properties only and no longer constructs either Core owner.
|
||||
|
||||
The App content host still opens portal.dat and projects immutable retail spell
|
||||
metadata. It installs that table exactly once through the Runtime owner; no DAT
|
||||
or App type enters `AcDream.Runtime`.
|
||||
|
||||
The interim desired-component snapshot introduced during J4.2 was deleted.
|
||||
`Spellbook.DesiredComponents` is now the only mutable desired-component owner,
|
||||
alongside learned spells, favorites, filters, active enchantments, and
|
||||
cooldowns. Inventory retains item/component objects and shortcut state, but no
|
||||
second component-count model.
|
||||
|
||||
Session reset preserves the accepted order: spellbook state clears before the
|
||||
App magic request projection, while local-player vitals/attributes/skills/
|
||||
properties/positions clear later at their existing reset edge. Direct Runtime
|
||||
disposal clears both halves, aggregates observer failures, and remains
|
||||
retryable until convergence.
|
||||
|
||||
## Retail basis
|
||||
|
||||
J4.3 changes lifetime ownership only. It preserves the existing retail-derived
|
||||
wire and reset mechanisms:
|
||||
|
||||
- `CPlayerSystem::OnEndCharacterSession @ 0x00562870`;
|
||||
- `PlayerModule::Clear @ 0x005D48A0`;
|
||||
- `CPlayerSystem::Begin @ 0x0055D410`;
|
||||
- PlayerDescription `0x0013` manifest replacement;
|
||||
- live spell/enchantment and vital update routing;
|
||||
- `CEnchantmentRegistry::OnCooldown @ 0x005943C0`;
|
||||
- `CreatureVital::GetMaxValue @ 0x0058F2DD`.
|
||||
|
||||
The current magic behavior and its DAT/UI research remain recorded in
|
||||
`claude-memory/project_magic_ui_and_casting.md`.
|
||||
|
||||
## Automated evidence
|
||||
|
||||
- Runtime suite: 162 passed.
|
||||
- App suite: 3,772 passed / 3 established skips.
|
||||
- Core suite: 3,305 passed / 2 established skips.
|
||||
- Core.Net suite: 600 passed.
|
||||
- UI abstractions: 545 passed.
|
||||
- Complete Release solution: 8,522 passed / 5 established skips.
|
||||
- Release build: pass, zero errors and 17 established test warnings.
|
||||
- `git diff --check`: pass.
|
||||
|
||||
Focused coverage proves exact spellbook/local-player coupling, immutable
|
||||
metadata installation, desired-component single ownership, independent
|
||||
Runtime instances, group-specific reset, retryable disposal after failures,
|
||||
production construction uniqueness, exact session routing, retained-UI
|
||||
borrowing, and shutdown ordering. Existing Core/Core.Net suites continue to
|
||||
cover complete PlayerDescription replacement, incremental spell/enchantment/
|
||||
vital changes, cooldowns, favorites, filters, skills, attributes, properties,
|
||||
positions, and ViewModel invalidation behavior.
|
||||
|
||||
## Exact-binary connected evidence
|
||||
|
||||
`logs/connected-world-gate-20260726-083921/report.json` passed on exact source
|
||||
and embedded binary commit
|
||||
`d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6`:
|
||||
|
||||
- six capped checkpoints through login, outdoor/dungeon/facility travel and
|
||||
revisit plus one fresh-process uncapped reconnect checkpoint;
|
||||
- 243.672-second capped route and 61.329-second reconnect route;
|
||||
- both sessions exited gracefully with code zero;
|
||||
- zero failures.
|
||||
|
||||
Its only warning is the established set of 25 expected world-edge landblock
|
||||
misses.
|
||||
|
||||
## Divergence audit
|
||||
|
||||
The slice changes owner placement, reset composition, and failure containment
|
||||
without changing retail algorithms or wire behavior. No divergence row was
|
||||
added or retired.
|
||||
|
||||
## Rollback
|
||||
|
||||
```text
|
||||
git revert d02a12ceac54d035797b4c58f2fc2f0ccad9a4d6
|
||||
```
|
||||
|
||||
Revert J4.3 before J4.2 if the gameplay-state groups ever need to be unwound.
|
||||
Do not revert J3's canonical entity/object ownership to mask a character-state
|
||||
failure.
|
||||
|
||||
## Next boundary
|
||||
|
||||
J4.4 moves the remaining presentation-independent character options and
|
||||
skill-derived command/bot projections into Runtime, then exposes borrowed
|
||||
immutable views and synchronous typed commands over all J4 owner groups.
|
||||
Controller, camera, input, animation, paperdoll, and panel state remain in App.
|
||||
Loading…
Add table
Add a link
Reference in a new issue