fix(runtime): restore interaction completion ownership

Preserve prepublication local motion completion, require the PartArray enter-world lifecycle port, and balance deferred Use busy ownership across dispatch and cancellation. Reconcile the completed GameWindow connected gates and add regression coverage.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-23 05:51:51 +02:00
parent 5c955c36ec
commit f9736ece6c
26 changed files with 675 additions and 68 deletions

View file

@ -30,9 +30,9 @@ What does NOT go here:
automated closeout are complete. The 1,622-line native shell has typed
startup, frame, callback, and shutdown owners; 293 focused tests, the
7,823/5 Release suite, the lifecycle/reconnect route, two canonical
nine-stop soaks, and the Slice-7 framebuffer comparison pass. Only the
user's final connected visual matrix remains before the campaign is marked
complete in [`docs/architecture/code-structure.md`](architecture/code-structure.md).
nine-stop soaks, and the Slice-7 framebuffer comparison pass. The user's
connected visual matrix passed 2026-07-23, so the campaign is complete in
[`docs/architecture/code-structure.md`](architecture/code-structure.md).
- **Separate rendering gate:** `#225`, lifestone/particle alpha ordering. Its
connected performance, lifetime, and unattended portal routes pass.
- **Carried behavior debt:** `#153` far-teleport unstreamed-edge arrival and
@ -7600,6 +7600,40 @@ outdoors at the angle that previously erased it.
# Recently closed
## #234 — [DONE 2026-07-23] Cancelled close-range Use could strand the busy cursor
**Closed:** 2026-07-23
**Severity:** HIGH
**Component:** interaction / retained UI / local approach
**Resolution:** `ItemInteractionController` acquired retail's shared busy
reference before `SelectionInteractionController` completed a close-range
turn. If that pre-wire approach was cancelled, failed to install, lost its
session, or crossed an entity-incarnation boundary, no Use packet existed and
therefore ACE could never return the `UseDone` needed to release the count.
An explicit, generation-bound `ItemUseRequestReservation` now owns that
boundary. Successful wire dispatch transfers ownership to authoritative
`UseDone`; every pre-dispatch cancellation path releases the reservation
locally and idempotently. Session reset invalidates late reservations so an
old callback cannot decrement a new session. Focused tests pin cancellation,
failed movement installation, stale identity, synchronous turn completion,
successful dispatch, and late post-reset resolution.
The connected report itself completed normally: the log contained the
successful NPC Use and `UseDone(0)`, and a managed heap snapshot afterward
showed busy count zero with no pending inventory or auto-wield transaction.
That evidence separated an ordinary in-flight rejection from the real latent
pre-wire leak.
**Connected gate:** Passed 2026-07-23. Cancelling the close-range turn no
longer strands the busy cursor, and the next NPC/item Use succeeds normally.
**Research:**
[`docs/research/2026-07-23-retail-use-busy-ownership-pseudocode.md`](research/2026-07-23-retail-use-busy-ownership-pseudocode.md).
---
## #229 — [DONE 2026-07-20] Initial login revealed an incomplete world
**Closed:** 2026-07-20