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>
4.9 KiB
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 @ 0x00588A80applies 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 @ 0x00564900releases 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
ClientObjectidentity. - 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
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.