diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 5c6d1bcca..de7ff4be7 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -7169,6 +7169,13 @@ static void RequireMenuDockingUsesManagedTypedSnapshot(string root) string.Join(", ", forbiddenClientHits)); } + if (clientState.Contains("public AetheriaRuntimeObservedDockingState? CurrentDocking(", StringComparison.Ordinal) || + clientState.Contains("AetheriaRuntimeObservedDockingState.TryCreateCurrent(entity, docking, refit", StringComparison.Ordinal)) + { + throw new InvalidOperationException( + "AetheriaClientState must not expose one-shot observed docking aggregation; callers should hold the managed typed docking documents they need."); + } + var menuPaths = new[] { Path.Combine(root, "Assets", "Scripts", "UI", "Menu", "InventoryMenu.cs"), @@ -8109,6 +8116,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root } var clientState = File.ReadAllText(clientStatePath); + var daemonRuntimeDocumentTests = File.ReadAllText(daemonRuntimeDocumentTestsPath); var topLevelClientState = clientState.Split( "public sealed class AetheriaClientDaemonState", StringSplitOptions.None)[0]; @@ -8117,7 +8125,6 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root "public Task LatestAsync()", "public TDocument Latest()", "public CultMeshReactiveDocument Reactive(", - "public AetheriaRuntimeObservedDockingState? CurrentDocking(", "public CultMeshReactiveDocument Reactive(", "public CultMeshReactiveDocument Reactive(", "public CultMeshReactiveDocument Reactive(", @@ -8423,6 +8430,13 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root "Observed docking state still samples legacy session wrappers instead of direct reactive CultMesh documents."); } + if (!daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDockingState.TryCreateCurrent(", StringComparison.Ordinal) || + daemonRuntimeDocumentTests.Contains("client.State.CurrentDocking()", StringComparison.Ordinal)) + { + throw new InvalidOperationException( + "Daemon runtime document tests must teach observed docking composition from caller-owned managed reactive typed documents."); + } + if (observedDaemonState.Contains("state.LatestFrame.ReactiveAsync", StringComparison.Ordinal) || observedDaemonState.Contains("state.LatestSoaView.ReactiveAsync", StringComparison.Ordinal) || observedDaemonState.Contains("AetheriaRuntimeReactiveObservedDaemonState", StringComparison.Ordinal) || @@ -13218,7 +13232,7 @@ static void RequireMainMenuContinueRunState(string root) if (observedDockingHits.Length > 0) { throw new InvalidOperationException( - "Observed docking state composition must live in AetheriaClientState.CurrentDocking(), not the Unity docking index: " + + "Observed docking state composition must use owned managed reactive typed documents in AetheriaUnityObservedDockingIndex: " + string.Join(", ", observedDockingHits)); } diff --git a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs index d9ef3649e..fa816a1e2 100644 --- a/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs +++ b/Assets/Scripts/Tests/DaemonRuntimeDocumentTests.cs @@ -239,7 +239,11 @@ public class DaemonRuntimeDocumentTests .GetAwaiter() .GetResult(); var stationRefit = client.State.Latest(); - var observedDocking = client.State.CurrentDocking(); + Assert.IsTrue(AetheriaRuntimeObservedDockingState.TryCreateCurrent( + currentEntityDocumentReactive, + currentDockingReactive, + stationRefitReactive, + out var observedDocking)); using var reactiveGameSurface = client.State.Reactive(AetheriaClientEveSurface.Game); using var reactiveGameTuiSurface = client.State.Reactive(AetheriaClientEveSurface.GameTui); using var reactiveEditorSurface = client.State.Reactive(AetheriaClientEveSurface.Editor); diff --git a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs index f12ed05df..0407fd48f 100644 --- a/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs +++ b/Packages/org.gamecult.aetheria.state/Runtime/AetheriaClientState.cs @@ -226,17 +226,6 @@ namespace GameCult.Aetheria.State.Verse : null; } - public AetheriaRuntimeObservedDockingState? CurrentDocking( - CultMeshReactiveDocumentOptions? options = null) - { - using var entity = Reactive(options); - using var docking = Reactive(options); - using var refit = Reactive(options); - return AetheriaRuntimeObservedDockingState.TryCreateCurrent(entity, docking, refit, out var current) - ? current - : null; - } - public CultMeshDocumentHandle Document(AetheriaClientEveSurface surface) where TDocument : class {