fix #270 closeout: strip investigation probes; close the issue

User-verified: casting fixed (exhaustion-edge gate) and monster attack
animations restored (spawn settle placement + lost-cell retry). Final
session evidence: 14/15 spawn settles grounded; Falling-refusal spam
collapsed 2,954 -> 15 transient pre-settle lines.

Strips the [UM-ACT]/[MT-FAIL]/[SPAWN-PLACE]/[remote-edge] probes, the
MotionInterpreter.DiagnosticGuid plumbing, and the two throwaway probe
tests (motion-table attack sweep, vitae color dump - both findings are
recorded in ISSUES/research). Complete Release suite: 10,030 passed /
5 skips / 0 failures.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-31 07:26:57 +02:00
parent 21b3a3f3d3
commit bb1640f777
7 changed files with 3 additions and 263 deletions

View file

@ -45,8 +45,6 @@ internal sealed class LiveEntityMotionRuntimeController
rm.Sink = new AcDream.Core.Physics.Motion.MotionTableDispatchSink(sequencer);
rm.Motion.DefaultSink = rm.Sink;
}
// #270 probe identity — strip with the probes.
rm.Motion.DiagnosticGuid = serverGuid;
// #174 (2026-07-05): the RemoveLinkAnimations seam is retail
// CPhysicsObj::RemoveLinkAnimations 0x0050fe20 — a TAILCALL to
// CPartArray::HandleEnterWorld 0x00517d70 →

View file

@ -205,13 +205,6 @@ internal sealed class LiveEntityNetworkUpdateController
body: remote.Body,
moverFlags: moverFlags,
movingEntityId: entity.Id);
if (AcDream.Core.Physics.PhysicsDiagnostics.DumpMotionEnabled)
{
Console.WriteLine(
$"[SPAWN-PLACE] guid={serverGuid:X8} cell=0x{cellId:X8} ok={settle.Ok} "
+ $"contact={settle.InContact} walkable={settle.OnWalkable} "
+ $"z={worldPos.Z:F3}->{settle.Position.Z:F3}");
}
if (!settle.Ok || !settle.InContact)
return; // no floor within reach — stays airborne like retail's fall

View file

@ -678,13 +678,6 @@ public sealed class MotionInterpreter : IMotionDoneSink
/// </summary>
public Action? RemoveLinkAnimations { get; set; }
/// <summary>
/// #270 diagnostic identity (2026-07-30): the owning entity's server
/// guid, stamped by the binding layer so [UM-ACT]/[MT-FAIL] probe lines
/// are attributable (probe-identity-attribution lesson). 0 = unset.
/// Strip with the #270 probes.
/// </summary>
public uint DiagnosticGuid { get; set; }
/// <summary>
/// R3-W4 no-op seam standing in for retail
@ -2781,16 +2774,6 @@ public sealed class MotionInterpreter : IMotionDoneSink
int diff = incoming >= stored ? incoming - stored : stored - incoming;
bool newer = diff <= 0x3FFF ? stored < incoming : incoming < stored;
// #270 missing-attack investigation (2026-07-30): one line per
// wire action item with the gate verdict — rides
// ACDREAM_DUMP_MOTION=1. Strip when #270 closes.
if (PhysicsDiagnostics.DumpMotionEnabled)
{
Console.WriteLine(
$"[UM-ACT] guid={DiagnosticGuid:X8} cmd=0x{a.Command:X8} stamp={incoming} stored={stored} "
+ $"newer={newer} auton={a.Autonomous} localSkip={IsLocalPlayer && a.Autonomous}");
}
if (!newer) continue;
// Local player skips its own autonomous echoes (305977).
@ -3039,19 +3022,6 @@ public sealed class MotionInterpreter : IMotionDoneSink
// non-action" apply-only path below — but WITHOUT writing state.
bool dispatchOk = sink?.ApplyMotion(motion, p.Speed) ?? true;
// #270 missing-attack investigation (2026-07-30): surface FAILED
// animation dispatches — a silently-failing sink is the "monster
// attacks but the animation never fires" candidate. Rides
// ACDREAM_DUMP_MOTION=1. Strip when #270 closes.
if (!dispatchOk && PhysicsDiagnostics.DumpMotionEnabled)
{
Console.WriteLine(
$"[MT-FAIL] guid={DiagnosticGuid:X8} motion=0x{motion:X8} speed={p.Speed:F2} "
+ $"style=0x{InterpretedState.CurrentStyle:X8} substate=0x{InterpretedState.ForwardCommand:X8} "
+ $"contact={PhysicsObj.TransientState.HasFlag(TransientStateFlags.Contact)} "
+ $"walkable={PhysicsObj.TransientState.HasFlag(TransientStateFlags.OnWalkable)}");
}
if (!dispatchOk)
{
// Retail: `result = CPhysicsObj::DoInterpretedMotion(...)` is

View file

@ -747,26 +747,6 @@ internal sealed class RuntimeRemotePhysicsUpdater
rm.Body.Position = resolved.Position;
if (resolved.CellId != 0)
committedCellId = resolved.CellId;
// [remote-edge] probe (stuck-cast/missing-attack investigation,
// 2026-07-30): each ground edge drains the mover's pending
// action animations (retail HandleEnterWorld) — one line per
// edge correlates eaten attack gestures with contact flickers.
Action hitGround = rm.Movement.HitGround;
Action leaveGround = rm.Motion.LeaveGround;
if (AcDream.Core.Physics.PhysicsDiagnostics.DumpMotionEnabled)
{
uint edgeGuid = record.ServerGuid;
hitGround = () =>
{
Console.WriteLine($"[remote-edge] guid={edgeGuid:X8} HitGround");
rm.Movement.HitGround();
};
leaveGround = () =>
{
Console.WriteLine($"[remote-edge] guid={edgeGuid:X8} LeaveGround");
rm.Motion.LeaveGround();
};
}
if (!AcDream.Core.Physics.PhysicsObjUpdate.CommitSetPositionTransition(
rm.Body,
resolved.InContact,
@ -775,8 +755,8 @@ internal sealed class RuntimeRemotePhysicsUpdater
resolved.CollisionNormal,
previousContact,
previousOnWalkable,
hitGround,
leaveGround,
rm.Movement.HitGround,
rm.Motion.LeaveGround,
() => IsCurrentOwner(
record,
rm,