chore: #163 strip R4-V5 temp diagnostics; docs: close #162 (no adaptation)

#163: remove [autowalk-gate] (+ _lastAutowalkGateLogTime throttle clock,
PlayerMovementController), [autowalk-feed] (GameWindow player tracker
feed), and the short-lived [MOVETO-CANCEL] #162 capture probe. The
durable ProbeAutoWalk family (PhysicsDiagnostics owner + DebugPanel
toggle + the permanent [autowalk] probe sites) stays.

#162 closed WITHOUT adaptation: user A/B says retail does not glide, and
post-#161 acdream matches (user-verified walk/run-by-distance movetos +
clean mid-chain key takeover). Head-interrupt + CancelMoveTo re-audited
retail-verbatim against the raw (unpack_movement 0x00524440,
interrupt_current_movement 0x005101f0, MoveToManager::CancelMoveTo
0x00529930 armed-gate); the launch-162 capture shows ACE's mt-0
reflections carry the mover's real locomotion, so cancels never strand
the legs. The old glide was killed by the R4-V5 stack + #161's
apply-pass params fix. Evidence trail in ISSUES Recently-closed #162.

Suite 3,964 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-03 17:38:41 +02:00
parent 584ad0a8f6
commit 5ebe2be38e
4 changed files with 47 additions and 55 deletions

View file

@ -85,28 +85,15 @@ R5/R6 touches the action list. **Where:**
`MotionInterpreter.MoveToInterpretedState` action loop /
`DispatchInterpretedMotion` (doc comment marks the gap).
## #162 — Observer-side moveto cancelled by ACE's autonomous MTS reflections (the "glide" class)
**Status:** OPEN — adjudication PENDING USER (2026-07-03)
**Finding (ACE-source-verified):** ACE re-broadcasts every inbound
MoveToState to all observers as an autonomous mt-0 UM (MovementData.cs:162
hardcoded IsAutonomous=true — ACE's own comment: "this is a hack ...
investigate this"; GameActionMoveToState.cs:36 unconditional), and sends a
chain exactly ONE mt-6 (no re-emit; no arrival broadcast). Retail's
unpack head-interrupt (verbatim in acdream) cancels the observer-side
moveto on each reflection → glide when the mover's client emits MTS
mid-chain. A retail observer on ACE should glide identically (parity).
**Pending:** the user's retail-observing-retail A/B; if parity confirmed,
EITHER accept, OR ship a narrow registered ACE-compat adaptation (e.g.
command-less autonomous reflection doesn't cancel an armed remote moveto)
— requires explicit user approval per the no-workarounds rule.
## #163 — Strip the R4-V5 stall-investigation diagnostics
**Status:** OPEN (2026-07-03) — remove `[autowalk-gate]` (
PlayerMovementController, + `_lastAutowalkGateLogTime`) and
`[autowalk-feed]` (GameWindow player tracker feed) once #160-#162 close;
they're TEMPORARY-tagged in-code.
**Status:** IN-PROGRESS (2026-07-03) — `[autowalk-gate]` (+
`_lastAutowalkGateLogTime`), `[autowalk-feed]`, and the short-lived
`[MOVETO-CANCEL]` #162 probe all stripped from source; build+commit
pending the running client's close (file locks). The durable
`ProbeAutoWalk` family (PhysicsDiagnostics flag + DebugPanel toggle +
the `[autowalk]` probe sites) stays — that's the promoted diagnostic
owner, not a temp diag.
## #159 — CombatAnimationPlanner uses 2013-decomp command numbering, not ACE/DRW
@ -5745,6 +5732,34 @@ outdoors at the angle that previously erased it.
# Recently closed
## #162 — Observer-side moveto cancelled by ACE's autonomous MTS reflections (the "glide" class)
**Status:** DONE (2026-07-03) — resolved WITHOUT adaptation; user-verified.
The user's A/B came back **retail does NOT glide** (new-fact branch), and
the follow-up acdream capture (launch-162, post-#161) showed acdream now
matches: walk/run by distance on mt-6 movetos (retail
`MovementParameters.GetCommand` threshold), clean takeover on a mid-chain
key press. Three-part evidence:
1. **Mechanism re-audit vs raw:** the head-interrupt IS unconditional
(`unpack_movement` 0x00524440 → `interrupt_current_movement` 0x005101f0
`MovementManager::CancelMoveTo(0x36)`), and `MoveToManager::CancelMoveTo`
(0x00529930) is gated on an ARMED moveto (drain + CleanUp +
StopCompletely; no-op otherwise). Our ports are verbatim — retail's
observer loses its armed moveto on the first reflection TOO.
2. **Wire capture:** ACE's mt-0 reflections carry the mover's REAL
locomotion (WalkForward @ -2.92 backward, RunForward @ 4.50, turns) —
so a cancel is always followed by correct legs; the no-glide outcome
needs no moveto protection. The `[MOVETO-CANCEL]` probe showed zero
mover-side cancels in normal use-walks (the mover's client doesn't emit
MTS mid-chain unless keys are pressed) and retail-correct
replace-cancels on an NPC's own successive TurnToObject UMs.
3. **The originally-observed glide is no longer reproducible** — killed by
the R4-V5 fix stack (un-ticked remote MoveToManagers `006cf659`, TS-40
link-strip `350fb5e3`, #160 run-rate `41006e79`) + #161's apply-pass
params fix `b1cf0102` (ModifyInterpretedState=true corrupted interpreted
state on EVERY UM apply, not just landings).
The theorized "narrow ACE-compat adaptation" is dead — nothing to adapt.
## #161 — Remote jump landing holds the falling pose (no landing anim)
**Status:** DONE (2026-07-03, `b1cf0102`) — user live-verified ("Yes works!").

View file

@ -49,18 +49,18 @@ whole gate state — it is how both wedges were pinned.
NOTE: "HitGround raw @305949" below was a mislabel (that line is inside
`move_to_interpreted_state`; real HitGround = 0x00528ac0 →
`apply_current_movement(0,0)`). Full trail: ISSUES Recently-closed #161.
2. **#162 — glide-class adjudication (PENDING USER)**: ACE re-broadcasts
every mover MoveToState to observers as autonomous mt-0
(MovementData.cs:162 — ACE's own "this is a hack" comment;
GameActionMoveToState.cs:36 unconditional; chain sends ONE mt-6, no
re-emit, nothing on arrival — all ACE-source-verified, see the issue).
Retail-verbatim head-interrupt cancels the observer moveto on each.
The user's retail-observing-retail A/B decides: parity (accept or a
NARROW registered adaptation — **explicit user approval required**) vs
new fact.
3. **#163 — strip the TEMPORARY diagnostics** once #161/#162 close:
`[autowalk-gate]` + `_lastAutowalkGateLogTime` (PlayerMovementController)
and `[autowalk-feed]` (GameWindow player tracker feed).
2. ~~**#162 — glide-class adjudication**~~ **CLOSED 2026-07-03, no
adaptation.** User A/B: retail does NOT glide (new-fact branch) — and
post-#161 acdream doesn't either (user-verified walk/run-by-distance +
clean mid-chain key takeover). Mechanism re-audit: head-interrupt +
CancelMoveTo ports are retail-verbatim (retail's observer ALSO loses
the armed moveto on the first reflection); ACE's mt-0 reflections carry
the mover's real locomotion, so the legs stay correct after any cancel.
The old glide was killed by the R4-V5 stack + #161's apply-pass params
fix. Full evidence: ISSUES Recently-closed #162.
3. ~~**#163 — strip the TEMPORARY diagnostics**~~ **DONE 2026-07-03**
(`[autowalk-gate]` + clock, `[autowalk-feed]`, and the short-lived
`[MOVETO-CANCEL]` probe; the durable ProbeAutoWalk family stays).
4. Then the **combined R2+R3+R4 visual-pass remainder** (jump/ledge
momentum, run-in-circles blend, stop settle, retail-observer view of
+Acdream) and **R5** (MovementManager facade + StickyManager +

View file

@ -198,8 +198,6 @@ public sealed class PlayerMovementController
private bool _prevTurnLeftHeld;
private bool _prevTurnRightHeld;
private bool _prevRunHeld;
// TEMPORARY diagnostic clock (2026-07-03 moveto-stall investigation).
private float _lastAutowalkGateLogTime = float.MinValue;
// Heartbeat timer.
// Cadence is 1.0 sec to match holtburger's
@ -528,22 +526,6 @@ public sealed class PlayerMovementController
// slot drains.
_motion.CheckForCompletedMotions?.Invoke();
// TEMPORARY diagnostic (2026-07-03 moveto-stall investigation,
// strip when closed): every gate input the armed moveto's per-tick
// drive depends on, ~2 Hz while armed, ProbeAutoWalk-gated.
if (PhysicsDiagnostics.ProbeAutoWalkEnabled
&& MoveTo is { } mtDiag && mtDiag.IsMovingTo()
&& _simTimeSeconds - _lastAutowalkGateLogTime > 0.5f)
{
_lastAutowalkGateLogTime = _simTimeSeconds;
var pmParts = new System.Collections.Generic.List<string>();
foreach (var n in _motion.PendingMotions) pmParts.Add($"0x{n.Motion:X8}");
var nodeParts = new System.Collections.Generic.List<string>();
foreach (var n in mtDiag.PendingActions) nodeParts.Add(n.Type.ToString());
Console.WriteLine(System.FormattableString.Invariant(
$"[autowalk-gate] type={mtDiag.MovementTypeState} init={mtDiag.Initialized} tlid=0x{mtDiag.TopLevelObjectId:X8} contact={_body.InContact} motionsPending={_motion.MotionsPending()} pm=[{string.Join(",", pmParts)}] nodes=[{string.Join(",", nodeParts)}] curCmd=0x{mtDiag.CurrentCommand:X8} auxCmd=0x{mtDiag.AuxCommand:X8} fwd=0x{_motion.InterpretedState.ForwardCommand:X8} pos=({Position.X:F1},{Position.Y:F1}) yaw={Yaw:F2}"));
}
// Portal-space guard: while teleporting, no input is processed and
// no physics is resolved. Return a zero-movement result so the caller
// can detect the frozen state (MotionStateChanged = false, no commands).

View file

@ -8009,11 +8009,6 @@ public sealed class GameWindow : IDisposable
_playerMoveToTargetGuid,
AcDream.Core.Physics.Motion.TargetStatus.Ok,
tp, tp));
if (AcDream.Core.Physics.PhysicsDiagnostics.ProbeAutoWalkEnabled)
{
Console.WriteLine(System.FormattableString.Invariant(
$"[autowalk-feed] Ok guid=0x{_playerMoveToTargetGuid:X8} pos=({tpos.X:F1},{tpos.Y:F1}) init={playerMtm.Initialized}"));
}
}
}
else