docs(interaction): plan GameWindow selection slice
Define the read-only query and stateful interaction ownership boundaries, pin retail ordering and lifecycle invariants, and isolate the GUID-incarnation and pending-pickup defects as #230 and #231 before the mechanical cutover. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
cf50ee3d50
commit
c271383714
3 changed files with 403 additions and 0 deletions
|
|
@ -67,6 +67,75 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #231 — F-key pickup omits retail pending destination-slot presentation
|
||||
|
||||
**Status:** IN-PROGRESS — isolated as Slice 1 corrective commit
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-07-21
|
||||
**Component:** selection / inventory / retained UI
|
||||
|
||||
**Description:** World double-click loot reserves its destination cell with the
|
||||
gray pending mesh before the request, but `SelectionPickUp` queues `SendPickUp`
|
||||
directly and skips that presentation. The item can therefore settle into the
|
||||
backpack without the same immediate first-slot reservation retail shows.
|
||||
|
||||
**Root cause / status:** Retail `CPlayerSystem::PlaceInBackpack @ 0x0055D8C0`
|
||||
always sends `CM_Item::SendNotice_ShowPendingInPlayer` before
|
||||
`AttemptToPlaceInContainer`, including the F-key action from
|
||||
`CPlayerSystem::OnAction @ 0x00561964`. acdream's double-click path enters
|
||||
`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`.
|
||||
|
||||
**Research:**
|
||||
[`docs/plans/2026-07-21-gamewindow-slice-1-selection-interaction.md`](plans/2026-07-21-gamewindow-slice-1-selection-interaction.md).
|
||||
|
||||
**Acceptance:** F-key pickup validates the target, publishes the exact
|
||||
destination/placement pending reservation, then sends one authoritative request.
|
||||
Server confirmation settles it; server failure removes it without speculative
|
||||
ownership mutation.
|
||||
|
||||
---
|
||||
|
||||
## #230 — Selection hits and deferred actions can cross live GUID incarnations
|
||||
|
||||
**Status:** IN-PROGRESS — isolated as Slice 1 prerequisite hardening
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-07-21
|
||||
**Component:** selection / live entity lifetime / interaction
|
||||
|
||||
**Description:** The completed render-selection frame and a pending close-range
|
||||
Use/PickUp store only the server GUID. If the object hides, is deleted, or is
|
||||
replaced with the same GUID before the next pick/completion, old presentation or
|
||||
movement state can resolve to the replacement incarnation. Session reset also
|
||||
leaves item target mode and the render-selection pulse/frame outside one atomic
|
||||
interaction reset.
|
||||
|
||||
**Root cause / status:** `RetailSelectionPart`/`RetailSelectionHit`, click
|
||||
lighting, and `PendingPostArrivalAction` lack the canonical local-entity/record
|
||||
identity owned by `LiveEntityRuntime`. Teardown's GUID-only replacement guard
|
||||
correctly protects new selection, but necessarily skips clearing a GUID-only
|
||||
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`.
|
||||
|
||||
**Research:**
|
||||
[`docs/plans/2026-07-21-gamewindow-slice-1-selection-interaction.md`](plans/2026-07-21-gamewindow-slice-1-selection-interaction.md).
|
||||
|
||||
**Acceptance:** Hidden/pending/deleted/replaced objects reject stale render hits;
|
||||
old click lighting never colors a replacement; natural MoveTo completion sends
|
||||
only for the captured current visible incarnation; session reset clears the
|
||||
complete interaction lifetime and never auto-targets.
|
||||
|
||||
---
|
||||
|
||||
## #228 — Clean Release build emits 17 test-project warnings
|
||||
|
||||
**Status:** OPEN
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue