diff --git a/src/AcDream.Core/Physics/PhysicsDiagnostics.cs b/src/AcDream.Core/Physics/PhysicsDiagnostics.cs
index 06a3180c..51ee9977 100644
--- a/src/AcDream.Core/Physics/PhysicsDiagnostics.cs
+++ b/src/AcDream.Core/Physics/PhysicsDiagnostics.cs
@@ -31,6 +31,19 @@ public static class PhysicsDiagnostics
public static bool ProbeResolveEnabled { get; set; } =
Environment.GetEnvironmentVariable("ACDREAM_PROBE_RESOLVE") == "1";
+ ///
+ /// Retail teleport readiness gate (ยง3.4, 2026-06-21). When true, every transition of
+ /// the TeleportArrivalReadiness verdict (NotReady โ Ready / Impossible) emits one
+ /// [arrival-gate] line: the destination cell id, landblock id, verdict,
+ /// PhysicsEngine.LandblockCount at the moment it flips, and whether the
+ /// flip was forced (Impossible) or natural (Ready).
+ ///
+ /// Initial state from ACDREAM_PROBE_RESOLVE=1 โ shares the existing probe
+ /// flag because this is a readiness-path extension; no new env var needed.
+ ///
+ public static bool ProbeArrivalGateEnabled { get; set; } =
+ Environment.GetEnvironmentVariable("ACDREAM_PROBE_RESOLVE") == "1";
+
///
/// When true, every change to PlayerMovementController.CellId
/// emits one [cell-transit] line: old โ new cell, current
@@ -534,6 +547,7 @@ public static class PhysicsDiagnostics
public static void ResetForTest()
{
ProbeResolveEnabled = false;
+ ProbeArrivalGateEnabled = false;
ProbeCellEnabled = false;
ProbeBuildingEnabled = false;
ProbeCellSetEnabled = false;