docs(runtime): close combat and magic intent

Record the exact J5.3 owner boundary, retail ordering, Release and connected evidence, rollback, and J5.4 handoff across architecture, roadmap, milestones, agent instructions, and durable memory.

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-26 12:09:19 +02:00
parent 20df9d155d
commit 75b761e658
11 changed files with 124 additions and 41 deletions

View file

@ -143,11 +143,13 @@ move back into `GameWindow.OnLoad`.
Magic follows the same boundary. Core `Spellbook` is the one learned/favorite/
desired/enchantment state projection; Core.Net owns exact manifest and live
message parsing; App `SpellCastingController` owns validated cast intent; and
the retained spell bar, spell/component book, and effects controllers only
project that state and invoke supplied actions. ACE remains authoritative after
the targeted/untargeted request for turning, animation, mana/components,
fizzle, impact, damage, and completion.
message parsing; Runtime `RuntimeActionState.SpellCast` owns validated cast
intent and last-request state; App `MagicRuntime` owns DAT formula/component
policy, live-object target queries, transport, and presentation binding. The
retained spell bar, spell/component book, and effects controllers only project
that state and invoke supplied actions. ACE remains authoritative after the
targeted/untargeted request for turning, animation, mana/components, fizzle,
impact, damage, and completion.
The shared LayoutDesc importer resolves inherited controller trees with retail
`LayoutDesc::InqFullDesc`/`ElementDesc::Incorporate` child identity semantics;
panel controllers never reconstruct missing inherited widgets by hand.
@ -224,12 +226,12 @@ src/
transaction/session-state owner
RuntimeCharacterState.cs -> coupled spellbook/local-player plus
character-option/run-jump owner
RuntimeActionState.cs -> exact selection/combat/target-mode and
interaction-transaction owner
RuntimeActionState.cs -> exact selection/interaction plus combat and
spell-cast intent owner
InteractionState.cs -> presentation-free cursor-target mode state
RuntimeInteractionTransactionState.cs -> use/appraisal/pickup FIFO,
exact approach and busy borrower
-> J3J4 and J5.1J5.2 complete; J5.3 combat/magic intent active
-> J3J4 and J5.1J5.3 complete; J5.4 local movement/cadence active
-> may reference Core, Core.Net, Content, and Plugin.Abstractions only
-> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui
@ -497,8 +499,12 @@ J4 inventory busy/request gate. App supplies picking, movement installation,
wire transport, toasts, and retained drag/pending-slot presentation. Hidden,
delete/GUID reuse, reset, disposal, callback re-entry, and transport failure
all converge without retaining a second owner or changing retail's press-time
order (`f5f7b417`). J5.3 next moves combat and spell-cast intent under this
same action root.
order (`f5f7b417`). The same root now owns the exact combat-attack,
combat-target, combat-mode, and spell-cast intent children. Retained bars and
graphical input adapters borrow those exact owners, while direct Runtime
commands drive the same operations and snapshots. App retains world/content
queries, transport, animation, sound, particles, and response text
(`20df9d15`). J5.4 next moves canonical local movement and outbound cadence.
`GpuWorldState` owns spatial buckets only and retains the exact projection key
through loaded/pending movement, landblock retirement/reload, origin recenter,

View file

@ -474,10 +474,10 @@ useful ordering seam, but its ownership status is **partial**.
| Inbound/object-frame order | **Complete App orchestration** | `UpdateFrameOrchestrator` owns the complete typed host phase graph; `RetailInboundEventDispatcher`, `RetailLiveFrameCoordinator`, `LiveObjectFrameController`, `LiveSpatialPresentationReconciler`, streaming/input/teleport/player-mode/camera owners preserve the accepted order. `GameWindow.OnUpdate` is one profiler-scoped handoff (`e91f3102`). |
| World reveal | **Complete** | `WorldRevealCoordinator` owns login/portal readiness, generation quiescence, and the exact streaming destination reservation. Login auto-entry and portal completion close only their active generation; stale completion cannot clear its replacement. Delayed portals retain the authored tunnel and centered retail wait notice rather than force-revealing incomplete content. Quiesced destination projections may become spatially resident for renderer preparation while all availability-gated gameplay consumers stay closed. |
| Retained gameplay UI | **Mostly complete feature ownership** | `RetailUiRuntime` and focused panel/controllers own layout and behavior. `GameWindow.OnLoad` still performs substantial service composition, which is allowed until the final composition cleanup. |
| Selection/interaction | **J5.1J5.2 complete; J5.3 active** | Runtime `RuntimeActionState` owns the exact selection, combat, target-mode, and `RuntimeInteractionTransactionState` children. The transaction child owns use/appraisal/pickup identity, the typed ordered FIFO, and exact post-arrival token while borrowing J4's sole inventory busy/request gate. App `WorldSelectionQuery`, movement/transport adapters, lighting, toasts, drag/drop, and pending-slot drawing remain presentation. No App transaction fallback or delegate queue remains (`b298f99f`, `f5f7b417`). |
| Action/combat/magic | **J5.1J5.3 complete; J5.4 active** | Runtime `RuntimeActionState` owns the exact selection, temporary target mode, interaction transactions, combat attack/target/mode, and spell-cast intent children. Interaction owns use/appraisal/pickup identity, ordered FIFO, and exact post-arrival token while borrowing J4's sole busy gate. Retained bars, input, world/content queries, transport, lighting, toasts, drag/drop, and effects remain App adapters/presentation. No parallel App owner remains (`b298f99f`, `f5f7b417`, `20df9d15`). |
| Landblock presentation | **Complete** | `LandblockBuildFactory` owns the captured-origin DAT transaction; concrete render/physics/DAT-static publishers and `LandblockPresentationPipeline` own typed-meter publication and exact retryable retirement. `StreamingController` owns stable destination/control/unload/Near/Far queues and destination reservation. CPU mesh-cache restaging requires an exact live owner. `StreamingOriginRecenterCoordinator` serializes old-window retirement with teleport/session origin lifetimes. `GameWindow` retains construction and one pipeline field only (`c79d0a49`, closeout `4a205a3e`; Slice E closeout `91e82c3c`). |
| Render-frame orchestration | **Complete** | `RenderFrameOrchestrator` owns the GPU-flight, resource, world/PView/shared-alpha, private-presentation, diagnostics, screenshot, and recovery graph. `GameWindow.OnRender` takes one logical window-size snapshot and performs one immutable handoff (`9d7df1bf`). |
| Unified `GameEntity` | **Slice J active at J5.3** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, and J5.1J5.2 action/interaction state share failure-safe Runtime owners while exact graphical sidecars stay in App. J5.3J7 move combat/magic intent, movement/physics/projectiles, and remaining world authority before one Runtime composition root. |
| Unified `GameEntity` | **Slice J active at J5.4** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, and J5.1J5.3 action/combat/magic state share failure-safe Runtime owners while exact graphical sidecars stay in App. J5.4J7 move movement/physics/projectiles and remaining world authority before one Runtime composition root. |
### 4.3 Revised extraction sequence