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

@ -26,8 +26,8 @@ What does NOT go here:
## Current queue — 2026-07-21
- **Active structural work:** `GameWindow` decomposition, beginning with the
selection/interaction ownership slice in
- **Active structural work:** `GameWindow` decomposition. Selection/interaction
ownership is complete; Slice 2 live animation presentation is next in
[`docs/architecture/code-structure.md`](architecture/code-structure.md).
This is the behavior-preserving prerequisite before new M4 feature bodies.
- **Separate rendering gate:** `#225`, lifestone/particle alpha ordering. Its
@ -69,7 +69,7 @@ Copy this block when adding a new issue:
## #231 — F-key pickup omits retail pending destination-slot presentation
**Status:** FIXED (2026-07-21) — keyboard pickup uses the shared ItemHolder path
**Status:** DONE (2026-07-21, `52dbb574` + `5acc3f01`)
**Severity:** MEDIUM
**Filed:** 2026-07-21
**Component:** selection / inventory / retained UI
@ -86,9 +86,9 @@ always sends `CM_Item::SendNotice_ShowPendingInPlayer` before
`ItemInteractionController` and raises `PendingBackpackPlacementRequested`;
the F-key switch case bypasses that owner.
**Files:** `src/AcDream.App/Rendering/GameWindow.cs`;
`src/AcDream.App/UI/ItemInteractionController.cs`;
future `src/AcDream.App/Interaction/SelectionInteractionController.cs`.
**Files:** `src/AcDream.App/UI/ItemInteractionController.cs`;
`src/AcDream.App/Interaction/SelectionInteractionController.cs`;
`src/AcDream.App/UI/Layout/InventoryController.cs`.
**Research:**
[`docs/plans/2026-07-21-gamewindow-slice-1-selection-interaction.md`](plans/2026-07-21-gamewindow-slice-1-selection-interaction.md).
@ -99,15 +99,20 @@ Server confirmation settles it; server failure removes it without speculative
ownership mutation.
**Resolution:** `ItemInteractionController.PlaceWorldItemInBackpack` now owns
the shared pending-placement notification and request dispatch. Both
double-click activation and the F-key route enter that method, so they publish
the same destination container and placement before the server request.
the exact-token pending destination projection. The F-key route reserves it
before immediate or deferred MoveTo transport, promotes that same reservation
only when the packet is actually sent, and withdraws it on cancel/lifetime
loss. The review correction also ported the single global
`ACCWeenieObject::prevRequest` owner across inventory, external-container,
toolbar, paperdoll, give, merge, split, and drop routes. Optimistic placement,
server rollback, and authoritative response notifications are distinct; a
response clears global and local state atomically before reentrant observers.
---
## #230 — Selection hits and deferred actions can cross live GUID incarnations
**Status:** FIXED (2026-07-21) — incarnation identity is carried and revalidated
**Status:** DONE (2026-07-21, `047a4c83` + `5acc3f01`)
**Severity:** HIGH
**Filed:** 2026-07-21
**Component:** selection / live entity lifetime / interaction
@ -127,9 +132,9 @@ pending action. `CombatTargetController` also treats SessionReset like an
ordinary clear and can re-acquire before live records drain.
**Files:** `src/AcDream.Core/Selection/RetailSelectionMesh.cs`;
`src/AcDream.App/Rendering/Selection/`;
`src/AcDream.App/Rendering/GameWindow.cs`;
`src/AcDream.App/Combat/CombatTargetController.cs`.
`src/AcDream.App/Interaction/WorldSelectionQuery.cs`;
`src/AcDream.App/Interaction/SelectionInteractionController.cs`;
`src/AcDream.App/Input/OutboundInteractionQueue.cs`.
**Research:**
[`docs/plans/2026-07-21-gamewindow-slice-1-selection-interaction.md`](plans/2026-07-21-gamewindow-slice-1-selection-interaction.md).
@ -144,7 +149,10 @@ complete interaction lifetime and never auto-targets.
current interaction-visible record. Deferred actions capture the same identity
and teardown clears the captured action even after GUID replacement. Session
reset now clears published selection geometry, lighting, ItemHolder target and
throttle state, and cannot trigger combat auto-target acquisition.
throttle state, and cannot trigger combat auto-target acquisition. Queued
input also captures the exact `ClientObject` reference, deferred movement is a
cancel-before-arm transaction, and session queue epochs prevent pre-reset work
from crossing into a new world.
---
@ -179,7 +187,7 @@ production runtime failure.
**Acceptance:** A non-incremental Release solution build reports zero warnings
and zero errors without suppressing analyzers or weakening nullable checking;
the full 6,481-pass / 5-skip suite remains green.
the full 6,558-pass / 5-skip suite remains green.
---