using AcDream.App.Tests.Rendering; using AcDream.App.Rendering.Walk; using DatReaderWriter; using DatReaderWriter.Options; namespace AcDream.App.Tests.Rendering.Walk; /// /// FW1's conformance gate, first slice: replay pose-stamped oracle /// fixtures through the ported walk and require the identical event /// sequence. The projection-light interior fixtures gate first /// (docs/research/2026-08-30-fw-walk-oracle/README.md, posed round); /// the outdoor/landscape fixtures join as the landscape world build /// lands. /// [Trait("Lane", "InstalledDat")] public sealed class WalkTraceConformanceTests { private sealed class Recorder : IWalkEventSink { public readonly List Events = new(); public void Emit(in WalkEvent walkEvent) => Events.Add(walkEvent); } private static DatCollection OpenDats() { string? datDir = CornerFloodReplayTests.ResolveDatDir(); if (datDir is null) { Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); } return new DatCollection(datDir!, DatAccessType.Read); } [Fact] public void Street_outdoor_first_frame_diff() { // The first landscape-involving conformance case: diff-first (the // assert prints both signatures on mismatch for adjudication). IReadOnlyList frames = WalkOracleTrace.Load("posed/holtburg-street-outdoor"); Assert.NotEmpty(frames); using DatCollection dats = OpenDats(); WalkOracleFrame frame = frames[1]; // frame 2: pose settled (marker timing) Assert.NotNull(frame.Pose); WalkLandscapeDatBuilder.BuiltWorld world = WalkLandscapeDatBuilder.Build(dats, frame.Pose!.CellId, frame.Pose.Origin); var ctx = new WalkTraceReplayContext(frame.Pose, world.Cells) { Buildings = world.Buildings, }; var walk = new RetailFrameWalk(); var recorder = new Recorder(); walk.WalkFrame(frame.Pose.CellId, null, world.Landscape, ctx, recorder); string expected = WalkTraceReplayContext.Signature(frame); string actual = WalkTraceReplayContext.Signature(recorder.Events); Assert.True( expected == actual, $"walk diverged from retail\nEXPECTED: {expected}\nACTUAL: {actual}"); } [Fact] public void Doorway_still_first_frame_diff() { // Interior flood adjudication: DI + DC(ov=2, n=3) + the landscape // through two exit views — tests the flood depth in isolation from // the building look-in machinery. IReadOnlyList frames = WalkOracleTrace.Load("posed/holtburg-doorway-still"); Assert.NotEmpty(frames); using DatCollection dats = OpenDats(); WalkOracleFrame frame = frames[1]; Assert.NotNull(frame.Pose); WalkLandscapeDatBuilder.BuiltWorld world = WalkLandscapeDatBuilder.Build(dats, frame.Pose!.CellId, frame.Pose.Origin); var ctx = new WalkTraceReplayContext(frame.Pose, world.Cells) { Buildings = world.Buildings, }; WalkCell camera = Assert.Contains(frame.Pose.CellId, world.Cells); // Render::deg_mul is DYNAMIC (auto-tuned by frame load), and this // capture ran right after the heavy terrace-edge capture with the // multiplier depressed: at mul ≤ 0 the degrade thresholds sit at or // below each level's ideal, so 001e (eff 29.3), 0026 (27.1), and // 002f (43.4) all select the portless level 1 — retail's zero // look-in floods. Every other fixture pins ≈ +0.99 (thresholds at // max). The recon session's live dump read −0.99 under the same cdb // load. Re-dump deg_mul per capture at the next retail session. var walk = new RetailFrameWalk { DegradeMultiplier = 0f }; var recorder = new Recorder(); walk.WalkFrame(frame.Pose.CellId, camera, world.Landscape, ctx, recorder); string expected = WalkTraceReplayContext.Signature(frame); string actual = WalkTraceReplayContext.Signature(recorder.Events); Assert.True( expected == actual, $"walk diverged from retail\nEXPECTED: {expected}\nACTUAL: {actual}"); } [Theory] [InlineData("posed/terrace-center")] [InlineData("posed/terrace-edge")] [InlineData("posed/cathedral-arrival")] public void Still_fixture_first_frame_reproduces_exactly(string fixture) { IReadOnlyList frames = WalkOracleTrace.Load(fixture); Assert.NotEmpty(frames); using DatCollection dats = OpenDats(); WalkOracleFrame frame = frames[1]; Assert.NotNull(frame.Pose); WalkLandscapeDatBuilder.BuiltWorld world = WalkLandscapeDatBuilder.Build(dats, frame.Pose!.CellId, frame.Pose.Origin); var ctx = new WalkTraceReplayContext(frame.Pose, world.Cells) { Buildings = world.Buildings, }; WalkCell? camera = (frame.Pose.CellId & 0xFFFFu) >= 0x100 ? Assert.Contains(frame.Pose.CellId, world.Cells) : null; var walk = new RetailFrameWalk(); var recorder = new Recorder(); walk.WalkFrame(frame.Pose.CellId, camera, world.Landscape, ctx, recorder); string expected = WalkTraceReplayContext.Signature(frame); string actual = WalkTraceReplayContext.Signature(recorder.Events); Assert.True( expected == actual, $"walk diverged from retail ({fixture})\nEXPECTED: {expected}\nACTUAL: {actual}"); } [Fact] public void Foundry_entry_reproduces_every_frame_before_the_f67_order_segment() { // F67–F79 (the fixture's terminal standing segment) diverge in ONE // aspect: the flood SET through building a9b40036 is exact, but // retail orders its DCs 116,118,11d where the replay orders // 11d,116,118. The microscope isolates the flip to the ROOT plane // of 0036's drawing BSP (N=(0,0,−1) D=2.8): the replay's // building-local eye z is 2.33 (d=+0.47 → NEG-subtree first), while // retail behaves as d<0 (POS-first) — a structural ~0.5 m frame // question (positionPush(2) / part-scale semantics), only // adjudicable by a live cdb dump of FrameCurrent->viewer.viewpoint // during 0036's build_draw_portals_only (script: // tools/walk-oracle/fw1-f67-viewpoint-probe.cdb). Frames 1–66 must // reproduce exactly. MovingFixtureReplay("posed/foundry-entry", stopBeforeFrame: 67); } [Theory] [InlineData("posed/holtburg-walkout")] [InlineData("posed/holtburg-transitions")] [InlineData("posed/holtburg-walkabout")] public void Moving_fixture_reproduces_every_pairable_frame(string fixture) => MovingFixtureReplay(fixture); private void MovingFixtureReplay(string fixture, int stopBeforeFrame = int.MaxValue) { // Marker timing: the pose stamped at frame N+1 is the camera state // frame N drew with (fixture README) — pair events(N) with // pose(N+1). One walk + one landscape carry state across frames, // reproducing retail's cross-frame caches (the stale cell-order // quirk included). IReadOnlyList frames = WalkOracleTrace.Load(fixture); Assert.True(frames.Count >= 3); using DatCollection dats = OpenDats(); WalkOraclePose anchor = frames[1].Pose!; WalkLandscapeDatBuilder.BuiltWorld world = WalkLandscapeDatBuilder.Build(dats, anchor.CellId, anchor.Origin); var walk = new RetailFrameWalk(); for (int n = 1; n < frames.Count - 1; n++) { WalkOracleFrame frame = frames[n]; if (frame.Number >= stopBeforeFrame) break; string expected = WalkTraceReplayContext.Signature(frame); // 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( matched, $"frame {frame.Number} diverged under both adjacent poses ({fixture})\n" + $"EXPECTED: {expected}\nACTUAL: {firstActual}"); } } [Fact] public void Foundry_deep_reproduces_every_complete_frame_exactly() { IReadOnlyList frames = WalkOracleTrace.Load("posed/foundry-deep"); Assert.NotEmpty(frames); using DatCollection dats = OpenDats(); Dictionary cells = WalkWorldDatAdapter.BuildInteriorCells(dats, 0xA9B40000u); var landscape = new WalkLandscape { MidWidth = 1, Blocks = new WalkLandBlock?[1] }; foreach (WalkOracleFrame frame in frames) { Assert.NotNull(frame.Pose); WalkCell camera = Assert.Contains(frame.Pose!.CellId, cells); var ctx = new WalkTraceReplayContext(frame.Pose, cells); var walk = new RetailFrameWalk(); var recorder = new Recorder(); walk.WalkFrame(frame.Pose.CellId, camera, landscape, ctx, recorder); Assert.Equal( WalkTraceReplayContext.Signature(frame), WalkTraceReplayContext.Signature(recorder.Events)); } } }