diff --git a/src/AcDream.Core/Rendering/RenderingDiagnostics.cs b/src/AcDream.Core/Rendering/RenderingDiagnostics.cs
index ff0a32f..421552c 100644
--- a/src/AcDream.Core/Rendering/RenderingDiagnostics.cs
+++ b/src/AcDream.Core/Rendering/RenderingDiagnostics.cs
@@ -76,6 +76,16 @@ public static class RenderingDiagnostics
Environment.GetEnvironmentVariable("ACDREAM_PROBE_INDOOR_CULL") == "1"
|| Environment.GetEnvironmentVariable("ACDREAM_PROBE_INDOOR_ALL") == "1";
+ ///
+ /// Phase A8 (2026-05-25): when true, the indoor-cell stencil pipeline
+ /// emits one [vis] line per frame: camera-inside-cell flag,
+ /// VisibleCellIds count, HasExitPortalVisible flag, portal triangle
+ /// count uploaded, and which outdoor passes were stencil-gated.
+ /// Initial state from ACDREAM_PROBE_VIS=1.
+ ///
+ public static bool ProbeVisibilityEnabled { get; set; } =
+ Environment.GetEnvironmentVariable("ACDREAM_PROBE_VIS") == "1";
+
///
/// Master toggle. Reading reflects the AND of all five flags
/// (true only when every probe is on). Writing cascades — setting
diff --git a/src/AcDream.UI.Abstractions/Panels/Debug/DebugVM.cs b/src/AcDream.UI.Abstractions/Panels/Debug/DebugVM.cs
index a761738..d7801f4 100644
--- a/src/AcDream.UI.Abstractions/Panels/Debug/DebugVM.cs
+++ b/src/AcDream.UI.Abstractions/Panels/Debug/DebugVM.cs
@@ -345,6 +345,17 @@ public sealed class DebugVM
set => RenderingDiagnostics.ProbeIndoorCullEnabled = value;
}
+ ///
+ /// Phase A8 (2026-05-25). Runtime mirror of
+ /// RenderingDiagnostics.ProbeVisibilityEnabled
+ /// (env var ACDREAM_PROBE_VIS).
+ ///
+ public bool ProbeVisibility
+ {
+ get => RenderingDiagnostics.ProbeVisibilityEnabled;
+ set => RenderingDiagnostics.ProbeVisibilityEnabled = value;
+ }
+
///
/// Indoor walking Phase 1 (2026-05-19). Runtime mirror of
/// PhysicsDiagnostics.ProbeIndoorBspEnabled (env var
diff --git a/tests/AcDream.Core.Tests/Rendering/RenderingDiagnosticsVisibilityTests.cs b/tests/AcDream.Core.Tests/Rendering/RenderingDiagnosticsVisibilityTests.cs
new file mode 100644
index 0000000..d0b96ee
--- /dev/null
+++ b/tests/AcDream.Core.Tests/Rendering/RenderingDiagnosticsVisibilityTests.cs
@@ -0,0 +1,27 @@
+// Phase A8 — visibility probe flag tests.
+
+using System;
+using AcDream.Core.Rendering;
+using Xunit;
+
+namespace AcDream.Core.Tests.Rendering;
+
+public class RenderingDiagnosticsVisibilityTests
+{
+ [Fact]
+ public void ProbeVisibilityEnabled_CanBeToggled()
+ {
+ var prev = RenderingDiagnostics.ProbeVisibilityEnabled;
+ try
+ {
+ RenderingDiagnostics.ProbeVisibilityEnabled = true;
+ Assert.True(RenderingDiagnostics.ProbeVisibilityEnabled);
+ RenderingDiagnostics.ProbeVisibilityEnabled = false;
+ Assert.False(RenderingDiagnostics.ProbeVisibilityEnabled);
+ }
+ finally
+ {
+ RenderingDiagnostics.ProbeVisibilityEnabled = prev;
+ }
+ }
+}