test: make prerequisite lanes fail honestly

This commit is contained in:
Erik 2026-08-18 12:09:41 +02:00
parent dfc841b779
commit 6faeb4a103
113 changed files with 424 additions and 336 deletions

View file

@ -76,7 +76,7 @@ public sealed class Ap157SortingSphereFloodMeasurementTests
if (datDir is null)
{
Console.WriteLine("SKIP: installed retail DAT directory is unavailable.");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -194,7 +194,7 @@ public sealed class BoxIntersectsCellBspDifferentialTests
{
string? datDirectory = ConformanceDats.ResolveDatDir();
if (datDirectory is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
var random = new Random(0x4230_5820);

View file

@ -134,7 +134,7 @@ public class CameraCornerSealReplayTests
public void Diagnostic_DispatchTrace_LeakPath_vs_Controls()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
var (engine, cache, envCells) = BuildBuildingEngine(dats);
@ -258,7 +258,7 @@ public class CameraCornerSealReplayTests
public void ViewerSweep_ThroughOpenings_PassesWithoutCollision()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
var (engine, _, _) = BuildBuildingEngine(dats);
@ -297,7 +297,7 @@ public class CameraCornerSealReplayTests
public void HoltburgCottageExit_ViewerSweep_AdvancesFromAlcoveToOutdoor()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
var graphCache = new PhysicsDataCache();

View file

@ -268,7 +268,7 @@ public sealed class CellTransitFindTransitCellsBoxTests
{
string? datDirectory = ConformanceDats.ResolveDatDir();
if (datDirectory is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
var cache = new PhysicsDataCache();

View file

@ -35,7 +35,7 @@ public class CellTransitTests
public void DeepInteriorSphere_NoStraddle_AddsNoOutdoorCells()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// Hydrate the cells in the portal chain.
// 0xA9B4013F — deep interior cell (the old over-penetration tick)
@ -72,7 +72,7 @@ public class CellTransitTests
public void AlcoveSphere_StraddlesExitPortal_ReachesDoorOutdoorCell()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// The alcove cell 0xA9B40150 IS the cell with the exit portal, and
// at this captured position the foot sphere straddles its plane

View file

@ -86,7 +86,7 @@ public class DoorBugTrajectoryReplayTests
public void LiveCompare_DoorOffCenterWalkthrough_Tick13558()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// BR-7 / A6.P4 (2026-06-11) — FLIPPED from match-the-capture to
// assert-the-fix. The capture IS the #99 bug (live walked through:
@ -122,7 +122,7 @@ public class DoorBugTrajectoryReplayTests
public void LiveCompare_DoorBlocksFromOutside_Tick22760()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// BR-7 / A6.P4 (2026-06-11) — narrowed from full-capture match to
// the blocking invariant. The capture (the WORKING outdoor side)
@ -165,7 +165,7 @@ public class DoorBugTrajectoryReplayTests
public void Diagnostic_Tick22760_DumpEngineInternals()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
PhysicsDiagnostics.ProbeResolveEnabled = true;
PhysicsDiagnostics.ProbeBuildingEnabled = true;
@ -218,7 +218,7 @@ public class DoorBugTrajectoryReplayTests
public void Diagnostic_Tick13558_DumpEngineInternals()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
PhysicsDiagnostics.ProbeResolveEnabled = true;
PhysicsDiagnostics.ProbeBuildingEnabled = true;
@ -280,7 +280,7 @@ public class DoorBugTrajectoryReplayTests
public void FindTransitCellsSphere_IndoorExitPortal_AddsOutsideForCapturedSpherePos()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// ── 1. Hydrate cell 0xA9B40150 from the real dat ────────────
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -481,7 +481,7 @@ public class DoorBugTrajectoryReplayTests
public void InsideOut_Tick3254_WithCottageWalls_ShouldBlock()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var (engine, cache) = BuildFaithfulDoorEngine(datDir);
@ -553,7 +553,7 @@ public class DoorBugTrajectoryReplayTests
public void CornerSlide_AlcoveEastToCottageNorth_ShouldBlock()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var (engine, cache) = BuildFaithfulDoorEngine(datDir);
@ -781,7 +781,7 @@ public class DoorBugTrajectoryReplayTests
public void Geometric_DoorSlabAtSphereHeight_OverlapsInZ()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
DatReaderWriter.Types.Frame partFrame;
float slabLocalZMin = float.MaxValue;
@ -833,7 +833,7 @@ public class DoorBugTrajectoryReplayTests
public void Directional_OutsideIn_SouthApproach_BlocksAtSlabSouthFace()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var (engine, _) = BuildFaithfulDoorEngine(datDir);
@ -861,7 +861,7 @@ public class DoorBugTrajectoryReplayTests
public void Directional_InsideOut_NorthApproach_BlocksAtSlabNorthFace()
{
var datDir = ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var (engine, _) = BuildFaithfulDoorEngine(datDir);

View file

@ -68,7 +68,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_DeadCenter_FrontApproach_BlocksOnBSP()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// Door at world (12, 12, 0). The frame's BSP slab extends
// entity-local Y∈[-0.009, 0.252] (poly Y range plus frame[0] offset).
@ -109,7 +109,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_SingleLargeTickJump_DeadCenter_StillBlocksOnBSP()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var start = new Vector3(12f, 11f, 0.5f);
// The full 20-tick × 0.10 m approach in ONE resolve call.
@ -145,7 +145,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_50cmOffCenter_FrontApproach_BlocksOnBSP()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// Same setup, but start 0.5 m off-center in X. Slab X range
// is approximately [11.05, 12.97] (frame[0].X offset = -0.006).
@ -175,7 +175,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_DeadCenter_BackApproach_BlocksOnBSP()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
// Start past the door at Y=13, walk back toward -Y.
var start = new Vector3(12f, 13f, 0.5f);
@ -205,7 +205,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_DiagnosticDump_FrontApproach()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
PhysicsDiagnostics.ProbeResolveEnabled = true;
PhysicsDiagnostics.ProbeBuildingEnabled = true;
@ -263,7 +263,7 @@ public class DoorCollisionApparatusTests
[Fact]
public void Apparatus_Grounded_50cmOffCenter_FrontApproach_Blocks()
{
if (!TryBuildScenario(out var ctx)) return;
if (!TryBuildScenario(out var ctx)) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
PhysicsDiagnostics.ProbeResolveEnabled = true;
PhysicsDiagnostics.ProbeBuildingEnabled = true;

View file

@ -49,7 +49,7 @@ public class DoorSetupGfxObjInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -247,7 +247,7 @@ public class DoorSetupGfxObjInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -282,7 +282,7 @@ public class DoorSetupGfxObjInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -417,7 +417,7 @@ public sealed class FlatBspQueryDifferentialTests
{
string? datDirectory = ConformanceDats.ResolveDatDir();
if (datDirectory is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDirectory, DatAccessType.Read);
var random = new Random(0x4934_4253);

View file

@ -24,7 +24,7 @@ public sealed class FlatCollisionInstalledDatTests
if (datDir is null)
{
_output.WriteLine("SKIP: installed retail DAT directory is unavailable.");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -118,7 +118,7 @@ public sealed class FlatCollisionInstalledDatTests
if (datDir is null)
{
_output.WriteLine("SKIP: installed retail DAT directory is unavailable.");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -34,7 +34,7 @@ public sealed class HumanoidMotionTableRootMotionTests
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
MotionTable table = Assert.IsType<MotionTable>(dats.Get<MotionTable>(HumanoidMotionTable));
@ -49,7 +49,7 @@ public sealed class HumanoidMotionTableRootMotionTests
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
using var boundedDats = new DatCollectionAdapter(dats);
@ -85,7 +85,7 @@ public sealed class HumanoidMotionTableRootMotionTests
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
MotionTable table = Assert.IsType<MotionTable>(dats.Get<MotionTable>(HumanoidMotionTable));

View file

@ -284,7 +284,7 @@ public class Issue108CellarAscentViewerReplayTests
public void Diagnostic_CellarAscent_PerStepTable()
{
var steps = RunAscent(BoomDistance, pathLagMeters: 0f);
if (steps is null) return;
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
uint lastPlayer = 0; uint lastViewer = 0xFFFFFFFFu; var lastBranch = (ViewerBranch)(-1);
int suspicious = 0;
@ -309,7 +309,7 @@ public class Issue108CellarAscentViewerReplayTests
foreach (float lag in new[] { 0f, 0.30f })
{
var steps = RunAscent(dist, lag);
if (steps is null) return;
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
int grass = steps.FindAll(s => s.EyeBelowGrade && s.ViewerOutdoorOrNull).Count;
int okFalse = steps.FindAll(s => !s.Viewer.Sweep.Ok).Count;
int fb = steps.FindAll(s => s.Viewer.Branch != ViewerBranch.Sweep).Count;
@ -330,7 +330,7 @@ public class Issue108CellarAscentViewerReplayTests
public void CellarAscent_ViewerStaysInterior_WhileEyeBelowGrade()
{
var steps = RunAscent(BoomDistance, pathLagMeters: 0f);
if (steps is null) return;
if (steps is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
var failures = steps.FindAll(s => s.EyeBelowGrade && s.ViewerOutdoorOrNull);
if (failures.Count > 0)

View file

@ -40,7 +40,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -116,7 +116,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -196,7 +196,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -228,7 +228,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -290,7 +290,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -394,7 +394,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -475,7 +475,7 @@ public class Issue137CorridorSeamInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -176,7 +176,7 @@ public class Issue137CorridorSeamReplayTests
if (datDir is null)
{
_out.WriteLine("SKIP: dat directory not found");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -265,7 +265,7 @@ public class Issue137CorridorSeamReplayTests
if (datDir is null)
{
_out.WriteLine("SKIP: dat directory not found");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -361,7 +361,7 @@ public class Issue137CorridorSeamReplayTests
if (datDir is null)
{
_out.WriteLine("SKIP: dat directory not found");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -422,7 +422,7 @@ public class Issue137CorridorSeamReplayTests
if (datDir is null)
{
_out.WriteLine("SKIP: dat directory not found");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -452,7 +452,7 @@ public class Issue137CorridorSeamReplayTests
if (datDir is null)
{
_out.WriteLine("SKIP: dat directory not found");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -29,7 +29,7 @@ public sealed class Issue147ArwicBuildingsDumpTests
var datDir = Env.GetEnvironmentVariable("ACDREAM_DAT_DIR")
?? Path.Combine(Env.GetFolderPath(Env.SpecialFolder.UserProfile),
"Documents", "Asheron's Call");
if (!Directory.Exists(datDir)) { _out.WriteLine($"SKIP: no dats at {datDir}"); return; }
if (!Directory.Exists(datDir)) { _out.WriteLine($"SKIP: no dats at {datDir}"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
var info = dats.Get<LandBlockInfo>(0xC6A9FFFEu); // Arwic landblock info

View file

@ -48,7 +48,7 @@ public class Issue175HubDoorPoseInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -171,7 +171,7 @@ public class Issue175HubDoorPoseInspectionTests
if (!Directory.Exists(datDir))
{
_out.WriteLine($"SKIP: dat directory not found at {datDir}");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -110,7 +110,7 @@ public class Issue176177SeamTransitLagTests
public void RunAcrossSeam_CellFlipPosition(int direction)
{
var datDir = ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
var engine = BuildEngine(dats);
var body = GroundedBody();

View file

@ -103,7 +103,7 @@ public class Issue180CorridorSweepHysteresisReplayTests
public void ClippedStop_IsTheContactPoint_NotAStepBoundary()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); return; }
if (datDir is null) { _out.WriteLine("SKIP: dats unavailable"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
var (engine, _) = BuildCorridorEngine(dats);

View file

@ -38,7 +38,7 @@ public class Issue186ConnectorCellGeometryInspectionTests
public void Dump_ConnectorCells_ShellAndCollision()
{
var datDir = DatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
foreach (uint cellId in new[] { 0xF6820116u, 0xF6820117u, 0xF6820118u })
@ -95,7 +95,7 @@ public class Issue186ConnectorCellGeometryInspectionTests
public void PortalSide_CentroidVsDatBit_AtGreyEye()
{
var datDir = DatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
// Live grey-pose eye (fresh HEAD capture + retail cdb trace both ~here).

View file

@ -78,7 +78,7 @@ public class Issue188FadingDoorMotionTableInspectionTests
public void Dump_PedestalWeakSpot_MotionTable_HookContents()
{
var datDir = DatDir();
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); return; }
if (datDir is null) { _out.WriteLine("SKIP: no dat dir"); Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); }
using var dats = new DatCollection(datDir, DatAccessType.Read);
const uint MotionTableId = 0x090000F9u; // live-captured from the Pedestal Weak Spot entity

View file

@ -77,7 +77,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
if (datDir is null)
{
_out.WriteLine("SKIP: installed retail DAT directory is unavailable.");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -402,7 +402,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
if (datDir is null)
{
_out.WriteLine("SKIP: installed retail DAT directory is unavailable.");
return;
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
}
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -554,7 +554,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
public void TheBspQueryReturnsAHitAtThePositionTheClientFellThrough()
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return; // CI without dats — the sibling dumps skip too.
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // CI without dats — the sibling dumps skip too.
using var dats = new DatCollection(datDir, DatAccessType.Read);
var info = dats.Get<LandBlockInfo>((Landblock & 0xFFFF0000u) | 0xFFFEu);
@ -627,7 +627,7 @@ public sealed class Issue337NeftetRockGeometryInspectionTests
public void TheOldBroadphaseMeasuredToTheOriginAndSoRejectedGeometryItStoodOn()
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
var info = dats.Get<LandBlockInfo>((Landblock & 0xFFFF0000u) | 0xFFFEu);

View file

@ -75,7 +75,7 @@ public class MotionCommandCatalogDatTests
public void AceShiftedRecallCommands_ExistInLocalMotionTables()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -87,7 +87,7 @@ public class MotionCommandCatalogDatTests
public void TwoThousandThirteenLifestoneAndHouseRecall_AlsoExist()
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -106,7 +106,7 @@ public class MotionCommandCatalogDatTests
public void AceOnlyCommands_ExistOnlyUnderShiftedIds(uint aceFullCommand)
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);
@ -121,7 +121,7 @@ public class MotionCommandCatalogDatTests
public void TwoThousandThirteenOnlyValues_HaveZeroLinkHits(uint retail2013FullCommand)
{
var datDir = ConformanceDats.ResolveDatDir();
if (datDir is null) return;
if (datDir is null) Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md.");
using var dats = new DatCollection(datDir, DatAccessType.Read);

View file

@ -31,7 +31,7 @@ public sealed class RestrictionObjPrevalenceInspectionTests
{
string? datDir = ConformanceDats.ResolveDatDir();
if (datDir is null)
return; // installed dats absent (CI) — skip cleanly
Assert.Fail("Lane=InstalledDat requires an installed retail DAT directory; see docs/release-gate.md."); // installed dats absent (CI) — skip cleanly
using var dats = new DatCollection(datDir, DatAccessType.Read);