docs(architecture): close selection extraction slice

Record the measured GameWindow reduction, final review and test gates, durable selection/inventory ownership rules, and live animation presentation as Slice 2.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-21 09:04:31 +02:00
parent 5acc3f01cf
commit 9ad8113c79
10 changed files with 141 additions and 52 deletions

View file

@ -213,3 +213,36 @@ plus optional stack size, palette, and shade. Healing kit WCIDs are 628 crude,
629 plain, 630 good, 631 excellent, and 632 peerless. The `+Acdream` developer
character can therefore create the best kit with either `/ci 632` or `@ci 632`;
both forms must produce canonical `@ci 632` Talk text.
## 2026-07-21 selection extraction and inventory transaction ownership
`WorldSelectionQuery` is the read-only App boundary over canonical live state,
the completed render-selection frame, object metadata, camera/cursor inputs,
DAT selection bounds, hostile lookup, and Use/PickUp range classification. It
never mutates `SelectionState`, starts movement, or sends packets.
`SelectionInteractionController` is the corresponding intent owner. It owns
world-click routing, closest/previous selection, the outbound frame-boundary
queue, Use/PickUp transport, and MoveTo deferral. Queued work captures both the
live local entity ID and exact `ClientObject` reference where available;
deferred movement uses cancel-before-arm ordering and a queue epoch prevents
pre-reset work from crossing session lifetime.
`ItemInteractionController` owns the one global inventory transaction, shaped
after retail `ACCWeenieObject::prevRequest`. Inventory, external-container,
toolbar, paperdoll, give, merge, split, drop, and deferred keyboard pickup all
acquire the same owner. A destination waiting projection carries an exact token
and item identity. Keyboard pickup may remain reserved-but-undispatched while
MoveTo runs, then promotes that exact token only when the wire request is sent.
`ClientObjectMoveOrigin` distinguishes immediate optimistic repaint, server
rollback repaint, and authoritative response. Only authoritative move/failure/
remove/stack responses complete the transaction. Completion clears the global
owner and local waiting projection atomically, publishes the old token-specific
projection resolution, then advertises readiness. This order is essential:
reentrant observers may start the next request without the old response tail
rejecting, hiding, or consuming it. Do not regress to GUID-only cleanup or let
ordinary `ObjectUpdated` events complete inventory work.
`GameWindow` now constructs and forwards narrow lifecycle edges to these
owners; no selection algorithm or interaction request body belongs there.