docs(runtime): close interaction transaction ownership

Record the exact J5.2 owner boundary, retail ordering, Release and connected evidence, rollback, and J5.3 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 11:22:07 +02:00
parent f5f7b4177f
commit 81b31857c6
11 changed files with 229 additions and 26 deletions

View file

@ -275,8 +275,14 @@ routing, typed commands/views, and shutdown borrow its children, while the App
interaction-state class and private controller fallback are deleted. Runtime interaction-state class and private controller fallback are deleted. Runtime
tests pass 182/182, App tests pass 3,779/3 skips, the complete Release suite tests pass 182/182, App tests pass 3,779/3 skips, the complete Release suite
passes 8,550/5 skips, and the exact-binary seven-checkpoint passes 8,550/5 skips, and the exact-binary seven-checkpoint
lifecycle/reconnect gate passes with graceful exits and zero failures. J5.2 lifecycle/reconnect gate passes with graceful exits and zero failures. J5.2 is
interaction-transaction ownership is active. complete at `f5f7b417`: `RuntimeActionState.Transactions` owns the strict use
gate, exact use/appraisal identity, typed interaction FIFO, and exact
post-arrival pickup token while borrowing J4's sole inventory busy/request
gate. App retains picking, movement/transport, and presentation only. Runtime
tests pass 197/197, App tests pass 3,775/3 skips, the complete Release suite
passes 8,561/5 skips, and the exact-binary seven-checkpoint gate passes with
graceful exits and zero failures. J5.3 combat/magic-intent ownership is active.
J0's rollback is J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is J1's rollback is
@ -306,6 +312,8 @@ J4.5's rollback is
`git revert 89e6b207f81946b40c38c8dc6597817ad99fc6e0`. `git revert 89e6b207f81946b40c38c8dc6597817ad99fc6e0`.
J5.1's rollback is J5.1's rollback is
`git revert b298f99f913249d299796e6a71f7a9b6b283ac1a`. `git revert b298f99f913249d299796e6a71f7a9b6b283ac1a`.
J5.2's rollback is
`git revert f5f7b4177f449ebcad9724bfea263ef73ab60255`.
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
passes. Slice I is closed in passes. Slice I is closed in
@ -319,7 +327,8 @@ is `docs/research/2026-07-26-slice-j3-6-lifetime-closeout.md`; J4 executes from
`docs/research/2026-07-26-slice-j4-4-character-projections.md`; J4.5 closeout `docs/research/2026-07-26-slice-j4-4-character-projections.md`; J4.5 closeout
is `docs/research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`; J5.1 is `docs/research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`; J5.1
closeout is closeout is
`docs/research/2026-07-26-slice-j5-1-canonical-action-state.md`. The exact G4 `docs/research/2026-07-26-slice-j5-1-canonical-action-state.md`; J5.2 closeout
is `docs/research/2026-07-26-slice-j5-2-interaction-transactions.md`. The exact G4
visual rollback visual rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence: the portal-warmup corrections. Evidence:

View file

@ -273,8 +273,14 @@ routing, typed commands/views, and shutdown borrow its children, while the App
interaction-state class and private controller fallback are deleted. Runtime interaction-state class and private controller fallback are deleted. Runtime
tests pass 182/182, App tests pass 3,779/3 skips, the complete Release suite tests pass 182/182, App tests pass 3,779/3 skips, the complete Release suite
passes 8,550/5 skips, and the exact-binary seven-checkpoint passes 8,550/5 skips, and the exact-binary seven-checkpoint
lifecycle/reconnect gate passes with graceful exits and zero failures. J5.2 lifecycle/reconnect gate passes with graceful exits and zero failures. J5.2 is
interaction-transaction ownership is active. complete at `f5f7b417`: `RuntimeActionState.Transactions` owns the strict use
gate, exact use/appraisal identity, typed interaction FIFO, and exact
post-arrival pickup token while borrowing J4's sole inventory busy/request
gate. App retains picking, movement/transport, and presentation only. Runtime
tests pass 197/197, App tests pass 3,775/3 skips, the complete Release suite
passes 8,561/5 skips, and the exact-binary seven-checkpoint gate passes with
graceful exits and zero failures. J5.3 combat/magic-intent ownership is active.
J0's rollback is J0's rollback is
`git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`. `git revert b632672e5ccabfb44c551e08f1c411ab2669c44a`.
J1's rollback is J1's rollback is
@ -304,6 +310,8 @@ J4.5's rollback is
`git revert 89e6b207f81946b40c38c8dc6597817ad99fc6e0`. `git revert 89e6b207f81946b40c38c8dc6597817ad99fc6e0`.
J5.1's rollback is J5.1's rollback is
`git revert b298f99f913249d299796e6a71f7a9b6b283ac1a`. `git revert b298f99f913249d299796e6a71f7a9b6b283ac1a`.
J5.2's rollback is
`git revert f5f7b4177f449ebcad9724bfea263ef73ab60255`.
Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network Slice H's retained UI/frame, bounded-light, and pooled/borrowed/direct network
work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate work is complete; the exact seven-checkpoint connected lifecycle/reconnect gate
passes. Slice I is closed in passes. Slice I is closed in
@ -317,7 +325,8 @@ is `docs/research/2026-07-26-slice-j3-6-lifetime-closeout.md`; J4 executes from
`docs/research/2026-07-26-slice-j4-4-character-projections.md`; J4.5 closeout `docs/research/2026-07-26-slice-j4-4-character-projections.md`; J4.5 closeout
is `docs/research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`; J5.1 is `docs/research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`; J5.1
closeout is closeout is
`docs/research/2026-07-26-slice-j5-1-canonical-action-state.md`. The exact G4 `docs/research/2026-07-26-slice-j5-1-canonical-action-state.md`; J5.2 closeout
is `docs/research/2026-07-26-slice-j5-2-interaction-transactions.md`. The exact G4
visual rollback visual rollback
is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or is `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`; do not revert G3 or
the portal-warmup corrections. Evidence: the portal-warmup corrections. Evidence:

View file

@ -69,7 +69,9 @@ What does NOT go here:
`75930787`; J3 canonical entity/object lifetime and J4 gameplay-state `75930787`; J3 canonical entity/object lifetime and J4 gameplay-state
ownership are complete through `89e6b207`. J5.1 canonical selection, ownership are complete through `89e6b207`. J5.1 canonical selection,
combat, and target-mode ownership is complete at `b298f99f`; J5.2 combat, and target-mode ownership is complete at `b298f99f`; J5.2
interaction-transaction ownership is active from interaction-transaction ownership is complete at `f5f7b417`, with 8,561
Release tests / 5 skips and the exact connected gate green. J5.3
combat/magic-intent ownership is active from
[`plans/2026-07-25-modern-runtime-slice-j.md`](plans/2026-07-25-modern-runtime-slice-j.md). [`plans/2026-07-25-modern-runtime-slice-j.md`](plans/2026-07-25-modern-runtime-slice-j.md).
The [documentation map](README.md) defines how this tactical ledger relates to The [documentation map](README.md) defines how this tactical ledger relates to

View file

@ -224,9 +224,12 @@ src/
transaction/session-state owner transaction/session-state owner
RuntimeCharacterState.cs -> coupled spellbook/local-player plus RuntimeCharacterState.cs -> coupled spellbook/local-player plus
character-option/run-jump owner character-option/run-jump owner
RuntimeActionState.cs -> exact selection/combat/target-mode owner RuntimeActionState.cs -> exact selection/combat/target-mode and
interaction-transaction owner
InteractionState.cs -> presentation-free cursor-target mode state InteractionState.cs -> presentation-free cursor-target mode state
-> J3J4 and J5.1 complete; J5.2 interaction transactions active RuntimeInteractionTransactionState.cs -> use/appraisal/pickup FIFO,
exact approach and busy borrower
-> J3J4 and J5.1J5.2 complete; J5.3 combat/magic intent active
-> may reference Core, Core.Net, Content, and Plugin.Abstractions only -> may reference Core, Core.Net, Content, and Plugin.Abstractions only
-> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui -> must never reference App, UI, Silk.NET, OpenAL, Arch, or ImGui
@ -487,9 +490,15 @@ exact `SelectionState`, `CombatState`, and presentation-free
`InteractionState` instances borrowed by direct/headless and graphical `InteractionState` instances borrowed by direct/headless and graphical
consumers. App retained widgets, input controllers, plugins, session routing, consumers. App retained widgets, input controllers, plugins, session routing,
and `GameWindow` hold views or exact borrowed children; none may construct a and `GameWindow` hold views or exact borrowed children; none may construct a
parallel production action owner. J5.2 moves the related use, appraisal, parallel production action owner. Its `RuntimeInteractionTransactionState`
pickup, and approach transaction lifetime into Runtime while preserving child owns the use throttle/source/target, appraisal identity, typed ordered
retail's press-time ordering and ACE's authoritative completion. interaction FIFO, and exact post-arrival pickup token while borrowing the one
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.
`GpuWorldState` owns spatial buckets only and retains the exact projection key `GpuWorldState` owns spatial buckets only and retains the exact projection key
through loaded/pending movement, landblock retirement/reload, origin recenter, 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`). | | 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. | | 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. | | 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.1 complete; J5.2 active** | Runtime `RuntimeActionState` owns the exact selection, combat, and presentation-free target-mode children. App `WorldSelectionQuery` remains a graphical read-only picker; App interaction controllers currently retain use/appraisal/pickup/approach transaction policy until J5.2 moves that lifetime behind Runtime commands and views without changing retail press-time behavior. | | 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`). |
| 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`). | | 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`). | | 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.2** | Canonical identity, retained-object lifetime, direct views, ordered entity/object deltas, J4 gameplay state, and J5.1 action state share failure-safe Runtime owners while exact graphical sidecars stay in App. J5.2J7 move interaction transactions, movement/physics/combat, and world authority before one Runtime composition root. | | 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. |
### 4.3 Revised extraction sequence ### 4.3 Revised extraction sequence

View file

@ -1,6 +1,6 @@
# acdream — strategic roadmap # acdream — strategic roadmap
**Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, and J5.2 interaction transactions are active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate. **Status:** Living document. Updated 2026-07-26. **M3 landed; M4 is active.** M3's retail casting/UI, R6 locomotion/collision/projectile/teleport/radar rebaseline, deterministic fresh-login/portal world lifecycle, and final two-client portal observer flow are user-gated. All eight slices of the behavior-preserving ownership campaign in [`docs/architecture/code-structure.md`](../architecture/code-structure.md), their automated closeout, and the user's connected visual matrix are complete. Modern Runtime J3 canonical entity/object lifetime and J4 gameplay-state ownership are closed at `89e6b207`; J5.1 canonical selection/combat/target-mode ownership is closed at `b298f99f`, J5.2 interaction transactions are closed at `f5f7b417`, and J5.3 combat/magic intent is active. Issue #225's lifestone/particle alpha comparison remains a separate rendering visual gate.
**Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file. **Purpose:** One source of truth for where the project is and where it's going. Every observed defect or missing feature has a named phase that owns it; when something looks wrong in-game, look here to find the phase that'll address it. Implementation details live in per-phase specs under `docs/superpowers/specs/`, not in this file.
--- ---
@ -1742,8 +1742,15 @@ port in any phase — no separate listing here.
> temporary target-mode graph; every graphical/direct consumer borrows it, > temporary target-mode graph; every graphical/direct consumer borrows it,
> and the App fallback owner is deleted. Its 182 Runtime tests, 3,779 App > and the App fallback owner is deleted. Its 182 Runtime tests, 3,779 App
> tests / 3 skips, 8,550-test / 5-skip complete Release suite, and > tests / 3 skips, 8,550-test / 5-skip complete Release suite, and
> exact-binary seven-checkpoint lifecycle/reconnect gate pass. J5.2 > exact-binary seven-checkpoint lifecycle/reconnect gate pass. J5.2 is
> interaction-transaction ownership is active. > complete at `f5f7b417`: Runtime owns the strict use gate, exact use and
> appraisal identity, typed ordered interaction FIFO, and exact post-arrival
> pickup token while borrowing J4's sole inventory busy/request gate. App
> retains picking, movement/transport, and presentation only; the App delegate
> queue and transaction fields are deleted. Its 197 Runtime tests, 3,775 App
> tests / 3 skips, 8,561-test / 5-skip complete Release suite, and exact-binary
> seven-checkpoint lifecycle/reconnect gate pass. J5.3 combat/magic-intent
> ownership is active.
> The historical exact cutover > The historical exact cutover
> rollback remains > rollback remains
> `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete: > `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. Slice H is complete:

View file

@ -217,8 +217,14 @@ residency is `0/0/0` at every stable checkpoint and teardown converges. Slice I
combat, and temporary target mode; every graphical/direct consumer borrows combat, and temporary target mode; every graphical/direct consumer borrows
those exact children, and the App fallback owner is deleted. Its 182 Runtime those exact children, and the App fallback owner is deleted. Its 182 Runtime
tests, 3,779 App tests / 3 skips, 8,550 full Release tests / 5 skips, and tests, 3,779 App tests / 3 skips, 8,550 full Release tests / 5 skips, and
exact-binary seven-checkpoint lifecycle/reconnect route pass. J5.2 exact-binary seven-checkpoint lifecycle/reconnect route pass. J5.2 completed
interaction-transaction ownership is active under at `f5f7b417`: one Runtime child owns use throttling/source/target,
appraisal identity, typed ordered interactions, and exact post-arrival
pickup state while borrowing the sole J4 inventory busy/request gate. The
App queue and transaction fields are deleted. Its 197 Runtime tests, 3,775
App tests / 3 skips, 8,561 full Release tests / 5 skips, and exact-binary
seven-checkpoint lifecycle/reconnect route pass. J5.3 combat/magic-intent
ownership is active under
[`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md). [`2026-07-25-modern-runtime-slice-j.md`](2026-07-25-modern-runtime-slice-j.md).
Slice-I closeout evidence is Slice-I closeout evidence is
[`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md). [`../research/2026-07-25-slice-i7-closeout.md`](../research/2026-07-25-slice-i7-closeout.md).
@ -242,6 +248,8 @@ Slice-J4.5 closeout evidence is
[`../research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`](../research/2026-07-26-slice-j4-5-gameplay-state-closeout.md). [`../research/2026-07-26-slice-j4-5-gameplay-state-closeout.md`](../research/2026-07-26-slice-j4-5-gameplay-state-closeout.md).
Slice-J5.1 closeout evidence is Slice-J5.1 closeout evidence is
[`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md). [`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md).
Slice-J5.2 closeout evidence is
[`../research/2026-07-26-slice-j5-2-interaction-transactions.md`](../research/2026-07-26-slice-j5-2-interaction-transactions.md).
The historical exact G4 visual rollback remains The historical exact G4 visual rollback remains
`git revert ef1d263337997bb030eadb7b8e71d73dc659907a`. `git revert ef1d263337997bb030eadb7b8e71d73dc659907a`.

View file

@ -2,7 +2,7 @@
**Date:** 2026-07-24 **Date:** 2026-07-24
**Status:** Slices AI and J0J3 are complete. Flat-authoritative collision, zero- **Status:** Slices AI, J0J4, and J5.1J5.2 are complete. Flat-authoritative collision, zero-
allocation resolve scratch, parsed-graph removal, connected correctness/ allocation resolve scratch, parsed-graph removal, connected correctness/
lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices FL were lifetime acceptance, and Slice-I closeout landed 2026-07-25. Slices FL were
explicitly approved 2026-07-24. Slice J0J1 established the enforced Runtime explicitly approved 2026-07-24. Slice J0J1 established the enforced Runtime
@ -16,7 +16,8 @@ ownership into Runtime at `011efbea`; J4.3 moved the coupled magic/player-sheet
owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections owner into Runtime at `d02a12ce`; J4.4 moved character settings/projections
and the shared typed state-command seam at `dcb61efb`; J4.5 closed canonical and the shared typed state-command seam at `dcb61efb`; J4.5 closed canonical
gameplay-state ownership at `89e6b207`. J5 movement, physics, interaction, gameplay-state ownership at `89e6b207`. J5 movement, physics, interaction,
and combat ownership is the active execution point. and combat ownership is active at J5.3 after canonical action state
(`b298f99f`) and interaction transactions (`f5f7b417`) moved to Runtime.
**Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and **Scope:** Reconcile and sequence the existing Modern Pipeline (`MP`) and
Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit. Linux/headless (`LH`) tracks using the 2026-07-24 connected performance audit.
@ -1274,7 +1275,7 @@ single Runtime shortcut/spellbook/inventory owners, graphical/no-window
command parity, failure-safe combined ledger, 8,544-test Release suite, command parity, failure-safe combined ledger, 8,544-test Release suite,
exact-binary lifecycle/reconnect gate, and canonical nine-stop route pass. exact-binary lifecycle/reconnect gate, and canonical nine-stop route pass.
J5 movement/physics/interaction/combat ownership is the current execution J5 movement/physics/interaction/combat ownership is the current execution
point. point. J5.1J5.2 are complete; J5.3 combat/magic intent is active.
Evidence: Evidence:
[`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md) [`../research/2026-07-25-slice-g5-production-profile.md`](../research/2026-07-25-slice-g5-production-profile.md)
and and

View file

@ -290,8 +290,16 @@ UI, session routing, typed commands/views, and shutdown borrow its children;
the App interaction-state class and private controller fallback are gone. the App interaction-state class and private controller fallback are gone.
Its 182 Runtime tests, 3,779 App tests / 3 skips, 8,550 complete Release tests / Its 182 Runtime tests, 3,779 App tests / 3 skips, 8,550 complete Release tests /
5 skips, and exact-binary seven-checkpoint lifecycle/reconnect gate pass. 5 skips, and exact-binary seven-checkpoint lifecycle/reconnect gate pass.
J5.2 interaction-transaction ownership is next. Evidence: J5.2 completed at `f5f7b417`. Runtime now owns the use throttle and exact
[`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md). use/appraisal/pickup transaction identities, typed ordered interaction FIFO,
and post-arrival pickup token while borrowing J4's sole busy/request gate.
App retains picking, movement/transport, lighting, toasts, drag/drop, and
pending-slot presentation. Its 197 Runtime tests, 3,775 App tests / 3 skips,
8,561 complete Release tests / 5 skips, and exact-binary seven-checkpoint
lifecycle/reconnect gate pass. J5.3 combat/magic intent is next. Evidence:
[`../research/2026-07-26-slice-j5-1-canonical-action-state.md`](../research/2026-07-26-slice-j5-1-canonical-action-state.md)
and
[`../research/2026-07-26-slice-j5-2-interaction-transactions.md`](../research/2026-07-26-slice-j5-2-interaction-transactions.md).
- Move presentation-free movement interpretation, authoritative/predicted - Move presentation-free movement interpretation, authoritative/predicted
physics state, selection identity, approach/use transactions, combat intent, physics state, selection identity, approach/use transactions, combat intent,

View file

@ -1,6 +1,6 @@
# Modern runtime Slice J5 — movement, physics, interaction, and combat # Modern runtime Slice J5 — movement, physics, interaction, and combat
**Status:** ACTIVE — J5.1 complete; J5.2 next **Status:** ACTIVE — J5.1J5.2 complete; J5.3 next
**Parent:** `2026-07-25-modern-runtime-slice-j.md`, J5 **Parent:** `2026-07-25-modern-runtime-slice-j.md`, J5
**Production base:** `2c67a2c3` **Production base:** `2c67a2c3`
**Authorization:** the user approved Slices FL, including the Slice J **Authorization:** the user approved Slices FL, including the Slice J
@ -86,7 +86,7 @@ commands to Runtime. The camera may not write the player heading directly.
|---|---|---| |---|---|---|
| J5.0 owner/retail inventory | complete | `docs/research/2026-07-26-slice-j5-owner-and-retail-order-inventory.md` | | J5.0 owner/retail inventory | complete | `docs/research/2026-07-26-slice-j5-owner-and-retail-order-inventory.md` |
| J5.1 canonical action state | complete | `b298f99f913249d299796e6a71f7a9b6b283ac1a`; one Runtime selection/combat/target-mode owner; 182 Runtime tests, 3,779 App tests / 3 skips, 8,550 complete Release tests / 5 skips, exact-binary connected lifecycle/reconnect pass | | J5.1 canonical action state | complete | `b298f99f913249d299796e6a71f7a9b6b283ac1a`; one Runtime selection/combat/target-mode owner; 182 Runtime tests, 3,779 App tests / 3 skips, 8,550 complete Release tests / 5 skips, exact-binary connected lifecycle/reconnect pass |
| J5.2 interaction transactions | pending | use/appraisal/pickup/approach state and transport ordering | | J5.2 interaction transactions | complete | `f5f7b4177f449ebcad9724bfea263ef73ab60255`; one Runtime transaction owner; 197 Runtime tests, 3,775 App tests / 3 skips, 8,561 complete Release tests / 5 skips, exact-binary connected lifecycle/reconnect pass |
| J5.3 combat and magic intent | pending | attack/mode/target/cast owners and typed input | | J5.3 combat and magic intent | pending | attack/mode/target/cast owners and typed input |
| J5.4 local movement and outbound cadence | pending | controller, body, movement managers, MTS/AP/jump cadence | | J5.4 local movement and outbound cadence | pending | controller, body, movement managers, MTS/AP/jump cadence |
| J5.5 per-session physics and remote simulation | pending | engine/scratch/shadows/remote canonical body | | J5.5 per-session physics and remote simulation | pending | engine/scratch/shadows/remote canonical body |
@ -187,6 +187,29 @@ Gate:
reentrancy, reset/disposal; reentrancy, reset/disposal;
- normalized graphical/direct ordered traces and no duplicate busy owner. - normalized graphical/direct ordered traces and no duplicate busy owner.
Completed 2026-07-26 at
`f5f7b4177f449ebcad9724bfea263ef73ab60255`.
`RuntimeInteractionTransactionState`, owned beneath `RuntimeActionState`, now
owns the retail 200-ms use gate, exact use source/target identity, pending and
current appraisal identity, typed ordered interactions, and the exact
post-arrival pickup token. It borrows—not duplicates—J4's
`InventoryTransactionState`, so ordinary Use transfers one busy reference to
authoritative UseDone and pickup retains the same one-request-at-a-time gate.
App retains world rays, lighting, movement installation, transport, toasts,
drag/drop, and pending-slot presentation. The old App delegate queue and App
transaction fields are deleted.
Identity-bound work is cancelled by exact local incarnation on delete and by
server GUID on Hidden. Re-entrant reset, disposal, transport failure, stale
approach completion, and GUID reuse cannot resurrect a transaction or strand
the busy gate. Focused near/far use, carried-use, appraisal, item-on-target,
pickup, pending-slot, hidden/delete, reset, and callback-order tests pass.
The exact-binary connected report is
`logs/connected-world-gate-20260726-111330/report.json`: 7/7 ready
checkpoints, two graceful code-zero exits, zero failures or invariant
violations, and only the 25 expected world-edge landblock misses. Evidence:
[`../research/2026-07-26-slice-j5-2-interaction-transactions.md`](../research/2026-07-26-slice-j5-2-interaction-transactions.md).
## J5.3 — combat and magic intent ## J5.3 — combat and magic intent
Move: Move:
@ -381,6 +404,12 @@ J5.1 rollback:
git revert b298f99f913249d299796e6a71f7a9b6b283ac1a git revert b298f99f913249d299796e6a71f7a9b6b283ac1a
``` ```
J5.2 rollback:
```text
git revert f5f7b4177f449ebcad9724bfea263ef73ab60255
```
## Acceptance ## Acceptance
J5 is complete only when: J5 is complete only when:

View file

@ -0,0 +1,121 @@
# Slice J5.2 — canonical interaction transactions
**Date:** 2026-07-26
**Production commit:** `f5f7b4177f449ebcad9724bfea263ef73ab60255`
**Parent plan:** `docs/plans/2026-07-26-modern-runtime-slice-j5.md`
## Result
Interaction transaction authority now lives beneath the canonical Runtime
action root. `RuntimeInteractionTransactionState` owns:
- retail's strict 200-ms local use throttle;
- last ordinary or targeted-use source/target identity;
- pending and current appraisal identity;
- the typed frame-ordered Activate/Use/Pickup FIFO;
- the exact pending pickup identity, inventory-placement token, and
post-arrival movement token;
- reset, disposal, failure, and ownership accounting.
It borrows the exact `RuntimeInventoryState.Transactions` instance. There is no
second busy counter, inventory request, object table, or pending-pickup
authority.
App remains the graphical adapter. It performs world picking, selection
lighting, approach installation, wire transport, toasts, retained drag/drop,
and pending-slot drawing. The former App `OutboundInteractionQueue` and the
use/appraisal/pickup transaction fields in App controllers are deleted.
## Retail order preserved
The implementation preserves the named-retail order recorded in
`docs/research/2026-07-26-slice-j5-owner-and-retail-order-inventory.md`:
- `ItemHolder::UseObject @ 0x00588A80` applies the strict local use gate,
emits ordinary Use immediately after policy accepts it, and transfers one
shared UI-busy reference to the server completion;
- `ClientUISystem::Handle_Item__UseDone @ 0x00564900` releases exactly one
busy reference;
- targeted Use stores the source until a compatible target is acquired, then
emits the exact source/target pair;
- pickup alone retains the existing local approach transaction and sends once
after the exact natural completion token.
No new polling, background thread, asynchronous command seam, speculative
approach for ordinary Use, or frame of gameplay latency was introduced.
## Lifetime and failure behavior
- Queued work carries server GUID, optional exact Runtime local ID, and
optional exact `ClientObject` identity.
- Hidden cancels every queued/deferred transaction for that server object.
- Deletion cancels only the removed local incarnation, so GUID reuse cannot
erase or execute replacement work.
- A captured frame drains in FIFO order; re-entrant additions wait for the
next frame.
- Re-entrant reset/disposal stops the captured suffix and cannot resurrect
targeted-use or pickup state.
- Appraisal transport failure rolls back only the busy reference acquired by
that exact request.
- A dispatched ordinary Use remains busy until authoritative UseDone; later
movement cancellation, Hidden, or deletion cannot retract or duplicate its
packet.
- Runtime action disposal precedes inventory disposal because the transaction
child borrows the exact inventory gate.
## Automated gates
All commands ran in Release:
- `dotnet test tests/AcDream.Runtime.Tests/AcDream.Runtime.Tests.csproj`:
197 passed.
- `dotnet test tests/AcDream.App.Tests/AcDream.App.Tests.csproj`:
3,775 passed / 3 fixture-generator skips.
- `dotnet build AcDream.slnx -c Release --no-restore`: passed.
- `dotnet test AcDream.slnx -c Release --no-build --no-restore`:
8,561 passed / 5 established skips.
- `git diff --check`: passed.
Focused tests cover the 199/200-ms throttle boundary, ordinary and targeted
Use, UseDone, appraisal replacement/refresh/failure, typed FIFO and re-entrant
drain, Hidden/delete cancellation, exact approach completion, transport
failure, pending-slot acceptance/failure, GUID reuse, reset/disposal, and
two-instance isolation.
## Exact-binary connected gate
Report:
`logs/connected-world-gate-20260726-111330/report.json`.
The report identifies exact source/binary commit
`f5f7b4177f449ebcad9724bfea263ef73ab60255` and passes:
- six capped login/outdoor/world-edge/dungeon/revisit checkpoints;
- one fresh uncapped-process reconnect checkpoint;
- 7/7 complete reveal/readiness checkpoints;
- zero invariant failures and zero render-scene mismatches;
- 243.534-second capped and 61.619-second reconnect sessions;
- graceful logout and code-zero exit for both processes;
- zero failures;
- one expected warning covering 25 empty world-edge landblocks.
## Divergence audit
This is an ownership-only move of accepted retail-faithful behavior. It adds
no approximation, alternate algorithm, polling mirror, or asynchronous seam.
No divergence-register row was added or retired.
## Rollback
```text
git revert f5f7b4177f449ebcad9724bfea263ef73ab60255
```
Revert J5 sub-slices in reverse order. Do not revert J4's canonical inventory
owner or Slice I's flat-collision cutover to mask a later action-owner defect.
## Next boundary
J5.3 moves combat attack and spell-cast intent into Runtime. App continues to
own the combat/spell widgets, camera tracking, animations, audio, particles,
DAT catalog/icon/formula presentation, and response text.