test(render) Campaign FW1: moving-tail state + falsified hypotheses recorded
The moving driver gains adjacent-pose tolerance (the marker-lag capture artifact) and stays parked: the four moving fixtures diverge at punch-edge frames under BOTH adjacent poses. FALSIFIED this round and reverted: the raw-decode + flipped-gates convention (it broke three still fixtures - the inverted-decode convention stands, six still fixtures frame-exact). Remaining instruments in the Skip note: znear, per-view punch ordering inside DrawMesh, exit-view precision. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
66f9e0d459
commit
17ee543cb1
1 changed files with 41 additions and 27 deletions
|
|
@ -124,12 +124,13 @@ public sealed class WalkTraceConformanceTests
|
||||||
$"walk diverged from retail ({fixture})\nEXPECTED: {expected}\nACTUAL: {actual}");
|
$"walk diverged from retail ({fixture})\nEXPECTED: {expected}\nACTUAL: {actual}");
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory(Skip = "FW1 moving-fixture tail (2026-08-30): the six STILL fixtures are "
|
[Theory(Skip = "FW1 moving tail (2026-08-30 v2): six still fixtures frame-exact; "
|
||||||
+ "fully conformant; the moving four diverge only at punch-edge frames "
|
+ "the moving four diverge at punch-edge frames under BOTH adjacent poses "
|
||||||
+ "(walkout/transitions F2: retail punches 001e where the replay does "
|
+ "(walkout/transitions F2 - retail punches 001e from deeper in the "
|
||||||
+ "not; walkabout diverges at F9, foundry-entry at F67) - pose-timing/"
|
+ "cottage; walkabout F9; foundry-entry F67). FALSIFIED: pose-lag "
|
||||||
+ "threshold sensitivity to adjudicate next (the exact pose-application "
|
+ "pairing, gate polarity swaps (raw+flipped-gates broke 3 still "
|
||||||
+ "point within the frame).")]
|
+ "fixtures - reverted). Next: znear (CY d guess 0.1), per-view punch "
|
||||||
|
+ "ordering inside DrawMesh, and exit-view precision at edge angles.")]
|
||||||
[InlineData("posed/holtburg-walkout")]
|
[InlineData("posed/holtburg-walkout")]
|
||||||
[InlineData("posed/holtburg-transitions")]
|
[InlineData("posed/holtburg-transitions")]
|
||||||
[InlineData("posed/holtburg-walkabout")]
|
[InlineData("posed/holtburg-walkabout")]
|
||||||
|
|
@ -152,29 +153,42 @@ public sealed class WalkTraceConformanceTests
|
||||||
for (int n = 1; n < frames.Count - 1; n++)
|
for (int n = 1; n < frames.Count - 1; n++)
|
||||||
{
|
{
|
||||||
WalkOracleFrame frame = frames[n];
|
WalkOracleFrame frame = frames[n];
|
||||||
WalkOraclePose pose = frames[n + 1].Pose!;
|
|
||||||
Assert.NotNull(pose);
|
|
||||||
WalkLandscapeDatBuilder.SetViewer(world.Landscape, pose.CellId, pose.Origin);
|
|
||||||
var ctx = new WalkTraceReplayContext(pose, world.Cells)
|
|
||||||
{
|
|
||||||
Buildings = world.Buildings,
|
|
||||||
};
|
|
||||||
WalkCell? camera = null;
|
|
||||||
if ((pose.CellId & 0xFFFFu) >= 0x100)
|
|
||||||
{
|
|
||||||
Assert.True(
|
|
||||||
world.Cells.TryGetValue(pose.CellId, out camera),
|
|
||||||
$"frame {frame.Number}: interior camera cell {pose.CellId:x8} not loaded");
|
|
||||||
}
|
|
||||||
var recorder = new Recorder();
|
|
||||||
|
|
||||||
walk.WalkFrame(pose.CellId, camera, world.Landscape, ctx, recorder);
|
|
||||||
|
|
||||||
string expected = WalkTraceReplayContext.Signature(frame);
|
string expected = WalkTraceReplayContext.Signature(frame);
|
||||||
string actual = WalkTraceReplayContext.Signature(recorder.Events);
|
// The marker dumps the PREVIOUS frame's camera, so frame N's
|
||||||
|
// true camera state lies between pose(N) and pose(N+1) — a
|
||||||
|
// capture artifact, not a port ambiguity. A frame passes when
|
||||||
|
// the replay matches under either adjacent pose.
|
||||||
|
string? firstActual = null;
|
||||||
|
bool matched = false;
|
||||||
|
foreach (WalkOraclePose pose in new[] { frames[n + 1].Pose!, frame.Pose! })
|
||||||
|
{
|
||||||
|
Assert.NotNull(pose);
|
||||||
|
WalkLandscapeDatBuilder.SetViewer(world.Landscape, pose.CellId, pose.Origin);
|
||||||
|
var ctx = new WalkTraceReplayContext(pose, world.Cells)
|
||||||
|
{
|
||||||
|
Buildings = world.Buildings,
|
||||||
|
};
|
||||||
|
WalkCell? camera = null;
|
||||||
|
if ((pose.CellId & 0xFFFFu) >= 0x100)
|
||||||
|
{
|
||||||
|
Assert.True(
|
||||||
|
world.Cells.TryGetValue(pose.CellId, out camera),
|
||||||
|
$"frame {frame.Number}: interior camera cell {pose.CellId:x8} not loaded");
|
||||||
|
}
|
||||||
|
var recorder = new Recorder();
|
||||||
|
walk.WalkFrame(pose.CellId, camera, world.Landscape, ctx, recorder);
|
||||||
|
string actual = WalkTraceReplayContext.Signature(recorder.Events);
|
||||||
|
firstActual ??= actual;
|
||||||
|
if (actual == expected)
|
||||||
|
{
|
||||||
|
matched = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
Assert.True(
|
Assert.True(
|
||||||
expected == actual,
|
matched,
|
||||||
$"frame {frame.Number} diverged ({fixture})\nEXPECTED: {expected}\nACTUAL: {actual}");
|
$"frame {frame.Number} diverged under both adjacent poses ({fixture})\n"
|
||||||
|
+ $"EXPECTED: {expected}\nACTUAL: {firstActual}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue