docs: file #174 — close-range door Use silently swallowed (wire-proven)

Facility Hub door investigation evidence: retail's byte-identical
UseItem works on the same ACE (door F74C/F74B captured, broadcast to
both clients; acdream renders the observed swing), while acdream's
later attempts never reach the wire — the AP-23 close-range deferral
parks the action on MoveToComplete(None) and the player's speculative
TurnToObject never completes after the first use of the session.
Candidates: per-attempt user-input cancel vs MotionsPending starvation
(the #170 class, local edition). Also noted: GameEventType.UseDone is
parsed nowhere, so ACE rejections are invisible. Captures:
door-use3/4.pcapng (session scratchpad). Next: ACDREAM_PROBE_AUTOWALK
round, then fix per the retail client use flow (§9a/§9b) — no
deferral-skipping band-aid.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-05 16:10:34 +02:00
parent 012d5c7bf7
commit 6811fc53d9

View file

@ -46,6 +46,64 @@ Copy this block when adding a new issue:
--- ---
## #174 — Door Use dies after the first attempt: close-range deferred uses silently swallowed (player MoveToManager never completes)
**Status:** OPEN — root under investigation (wire + log evidence in hand; needs one `ACDREAM_PROBE_AUTOWALK=1` round to pick between the two candidate mechanisms)
**Severity:** HIGH (can't open doors reliably → blocks the #137 door acceptance + normal play)
**Filed:** 2026-07-05
**Component:** interaction — B.4b Use pipeline / AP-23 speculative moveto deferral (R5-V5 facade)
**Description (user, Facility Hub 0x8A02, door guid 0x78A020C7 Setup 0x02000C9D
useRadius=0.50):** double-clicking / R-using the door does nothing. The same
door opens fine from the retail client on the same ACE, and acdream renders
the observed swing correctly (inbound path healthy).
**Evidence (3 wire captures + app log, 2026-07-05):**
1. First attempt (log): `use-deferred seq=624` fired (the close-range
deferral COMPLETED once — arrival callback ran), then 625 + 642647 sent
far-range. Door never opened. ACE's replies to those weren't captured.
2. Retail control (capture `door-use3.pcapng`): retail sent
`[0xF7B1][seq][0x36][guid]` ×5 — ACE responded EVERY time with door
`0xF74C` UpdateMotion + `0xF74B` SetState (ETHEREAL toggling 0x1001C ↔
0x10018), broadcast to BOTH clients. Message format identical to ours.
3. acdream re-try (capture `door-use4.pcapng` + log): 2× DoubleClick + 4× R
— picks land, but ZERO `[B.4b] use` lines and ZERO door-guid packets on
the wire. The Use is swallowed CLIENT-SIDE before the send.
**Mechanism (code trace):** `SendUse` close-range branch (≤2 m by the AP-23
bucket — this door's flags → 2.0 m, overriding its real 0.5 m) parks the
action in `_pendingPostArrivalAction` and fires it ONLY from
`MoveToComplete(WeenieError.None)` (natural completion of the speculative
TurnToObject installed through the R5-V5 facade). A cancel (user input) or a
never-starting turn silently eats the use — no toast, no log (the deferral
prints are probe-gated). Candidates for "never completes": (a) the
`BeginTurnToHeading` `MotionsPending()` early-return starving the turn (the
#170 class, local-player edition — the log shows a steady
`MOTIONDONE pending=True` stream); (b) every attempt instantly cancelled by
concurrent user movement input (retail-faithful per-attempt, but the user
also clicked while standing still). Also noted: `GameEventType.UseDone`
(0x01C7) is parsed nowhere (not registered in `GameEventWiring`) — ACE
rejection reasons are invisible; and the first attempt's 7 sent uses never
opened the door either (suspect: concurrent outbound movement cancelling
ACE's MoveToChain server-side — unproven, replies not captured).
**Files:** `src/AcDream.App/Rendering/GameWindow.cs` (`SendUse` ~12607,
`OnAutoWalkArrivedSendDeferredAction` ~12761, `InstallSpeculativeTurnToTarget`
~12842, `MoveToFactory` callback wiring ~13530);
`src/AcDream.Core/Physics/Motion/MoveToManager.cs` (`BeginNextNode` /
`BeginTurnToHeading` gates). Captures in the session scratchpad
(`door-use3.pcapng`, `door-use4.pcapng`).
**Next:** relaunch with `ACDREAM_PROBE_AUTOWALK=1`; user clicks the door
(a) standing still, (b) right after moving. `[autowalk-end reason=complete
err=…]` vs silence discriminates cancel-vs-starved. Fix per retail: the use
flow must either complete the turn and fire, or surface the cancel
(retail re-queues/cancels visibly — decomp the client use flow §9a/§9b before
patching). DO NOT band-aid by skipping the deferral (the turn-to-face is
retail behavior).
---
## #173 — Observed character jumping into a ceiling hovers at the roof until the arc decays (no collision-velocity response on remotes) ## #173 — Observed character jumping into a ceiling hovers at the roof until the arc decays (no collision-velocity response on remotes)
**Status:** 🟡 FIX SHIPPED 2026-07-05 (this commit) — pending user visual gate (watch a second client jump into the 0x0007 dungeon roof; it should bounce down immediately like the local player). **Status:** 🟡 FIX SHIPPED 2026-07-05 (this commit) — pending user visual gate (watch a second client jump into the 0x0007 dungeon roof; it should bounce down immediately like the local player).