Remove reactive state session wrappers

This commit is contained in:
Meta Vens 2026-06-28 23:27:50 +01:00
commit c5d92cbf53
8 changed files with 121 additions and 484 deletions

View file

@ -7927,16 +7927,14 @@ static void RequireUnityViewportAndMapReadsUseManagedAccessors(string root)
"public AetheriaRuntimeSectorMapDocument LatestSectorMap()",
"public AetheriaRuntimeZoneContactsDocument LatestZoneContacts()",
"public AetheriaRuntimeCurrentZoneDocument LatestZone()",
"public AetheriaRuntimeCurrentZoneSession ObserveZone(",
"public CultMeshReactiveDocument<AetheriaRuntimeCurrentZoneDocument> ReactiveZone(",
"public AetheriaRuntimeCurrentEntityDocument LatestEntity()",
"public AetheriaRuntimeObjectsViewportDocument LatestObjects(AetheriaRuntimeRtsViewportBounds viewport)",
"public CultMeshReactiveDocument<AetheriaRuntimeObjectsViewportDocument> ReactiveObjects(",
"public AetheriaRuntimeObjectsViewportSession ObserveObjects(",
"public AetheriaRuntimeRenderSplatsViewportDocument LatestRenderSplats(AetheriaRuntimeRtsViewportBounds viewport)",
"public CultMeshReactiveDocument<AetheriaRuntimeRenderSplatsViewportDocument> ReactiveRenderSplats(",
"public AetheriaRuntimeRenderSplatsViewportSession ObserveRenderSplats(",
"public AetheriaRuntimeZoneDetailsDocument LatestZone(int zoneIndex)",
"public AetheriaRuntimeZoneDetailsSession ObserveZone("
"public CultMeshReactiveDocument<AetheriaRuntimeZoneDetailsDocument> ReactiveZone("
};
var missingClientSymbols = requiredClientSymbols
.Where(symbol => !clientState.Contains(symbol, StringComparison.Ordinal))
@ -15673,8 +15671,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"public Observable<TDocument> Watch<TDocument>()",
"public Task<CultMeshReactiveDocument<TDocument>> ReactiveAsync<TDocument>(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(",
"public AetheriaRuntimeObservedDaemonSession ObserveDaemon("
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon("
};
var missingManagedStateAccessSymbols = requiredManagedStateAccessSymbols
.Where(symbol => !aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
@ -15689,15 +15686,10 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
var requiredManagedObservedDaemonSymbols = new[]
{
"public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(",
"public AetheriaRuntimeObservedDaemonSession ObserveDaemon(",
"using var frame = ReactiveDaemonFrame(options);",
"using var soaView = TryReactiveDaemonSoaView(options);",
"using var zoneRender = ReactiveZoneRender(options);",
"AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)",
"var frame = ReactiveDaemonFrame(options);",
"CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? soaView = null;",
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument>? zoneRender = null;",
"return new AetheriaRuntimeObservedDaemonSession(frame, soaView, zoneRender);"
"AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)"
};
var missingManagedObservedDaemonSymbols = requiredManagedObservedDaemonSymbols
.Where(symbol => !aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
@ -15705,16 +15697,19 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
if (missingManagedObservedDaemonSymbols.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientState must compose current observed daemon state from managed typed reactive documents: " +
"AetheriaClientState must compose current observed daemon state from direct managed reactive typed documents: " +
string.Join(", ", missingManagedObservedDaemonSymbols));
}
if (!daemonRuntimeDocumentTests.Contains("ManagedStateSamplesCurrentObservedDaemonFromReactiveDocuments()", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedSession = client.State.ObserveDaemon();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedFrame = client.State.ReactiveDaemonFrame();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedSoaView = client.State.ReactiveDaemonSoaView();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("using var observedZoneRender = client.State.ReactiveZoneRender();", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
!daemonRuntimeDocumentTests.Contains("var sampledObserved = client.State.CurrentObservedDaemon();", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"Daemon runtime document tests must teach current observed daemon sampling through AetheriaClientState.ObserveDaemon() and CurrentObservedDaemon().");
"Daemon runtime document tests must teach observed daemon sampling through direct reactive daemon documents and CurrentObservedDaemon().");
}
var requiredObservedDaemonStateSymbols = new[]
@ -15726,15 +15721,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender",
"var currentFrame = frame?.Current;",
"var currentZoneRender = zoneRender?.Current;",
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)",
"public sealed class AetheriaRuntimeObservedDaemonSession",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _frame;",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument>? _soaView;",
"private readonly CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender;",
"public AetheriaRuntimeObservedDaemonState? Current =>",
"_frame.Dispose();",
"_soaView?.Dispose();",
"_zoneRender.Dispose();"
"new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)"
};
var missingObservedDaemonStateSymbols = requiredObservedDaemonStateSymbols
.Where(symbol => !observedDaemonState.Contains(symbol, StringComparison.Ordinal))
@ -15755,6 +15742,46 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"Observed daemon state still composes legacy session wrappers instead of direct reactive CultMesh documents.");
}
var clientStateSessionWrapperSymbols = new[]
{
"Session Observe",
"new AetheriaRuntimeCatalogSession",
"new AetheriaRuntimeDaemonFrameSession",
"new AetheriaRuntimeLoadoutTemplatesSession",
"new AetheriaRuntimeSectorMapSession",
"new AetheriaRuntimeZoneContactsSession",
"new AetheriaRuntimeStationRefitSession",
"new AetheriaRuntimeZoneRenderSession",
"new AetheriaRuntimeCurrentZoneSession",
"new AetheriaRuntimeCurrentEntitySession",
"new AetheriaRuntimeCurrentDockingSession",
"new AetheriaRuntimePlayerSettingsSession",
"new AetheriaRuntimeVerseHostSettingsSession",
"new AetheriaRuntimeObjectsViewportSession",
"new AetheriaRuntimeRenderSplatsViewportSession",
"new AetheriaRuntimeInventorySession",
"new AetheriaRuntimeStarbridgeScenarioSession",
"new AetheriaRuntimeStarbridgeRunSession",
"new AetheriaRuntimeStarbridgeSummarySession",
"new AetheriaRuntimeStarbridgePlayerSeatSession"
};
var clientStateSessionWrapperHits = clientStateSessionWrapperSymbols
.Where(symbol => aetheriaClientState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
if (clientStateSessionWrapperHits.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientState still exposes per-document Observe* session wrappers instead of direct Reactive* document access: " +
string.Join(", ", clientStateSessionWrapperHits));
}
var runtimeStateSessionsPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeStateSessions.cs");
if (File.Exists(runtimeStateSessionsPath))
{
throw new InvalidOperationException(
"AetheriaRuntimeStateSessions.cs still exists; per-document session wrappers must be deleted in favor of direct CultMesh reactive documents.");
}
var forbiddenObservedDaemonStateSymbols = new[]
{
"string statePath",
@ -15882,13 +15909,17 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
!daemonObserver.Contains("AetheriaUnityRuntimeClientProvider.ResolveClient(", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory)", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonSession _observedDaemon", StringComparison.Ordinal) ||
!daemonObserver.Contains("_observedDaemon ??= ResolveClient()?.State?.ObserveDaemon();", StringComparison.Ordinal) ||
!daemonObserver.Contains("return _observedDaemon?.Current;", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _daemonFrame", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _daemonSoaView", StringComparison.Ordinal) ||
!daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _zoneRender", StringComparison.Ordinal) ||
!daemonObserver.Contains("_daemonFrame ??= state.ReactiveDaemonFrame();", StringComparison.Ordinal) ||
!daemonObserver.Contains("_daemonSoaView ??= TryReactiveDaemonSoaView(state);", StringComparison.Ordinal) ||
!daemonObserver.Contains("_zoneRender ??= state.ReactiveZoneRender();", StringComparison.Ordinal) ||
!daemonObserver.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(", StringComparison.Ordinal) ||
!daemonObserver.Contains("DisposeObservedDaemonSession()", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaDaemonObserver must sample observed daemon state through a single managed AetheriaRuntimeObservedDaemonSession.");
"AetheriaDaemonObserver must sample observed daemon state through direct managed reactive daemon documents.");
}
if (daemonObserver.Contains("AetheriaRuntimeStateReader.TryReadObservedDaemonState", StringComparison.Ordinal) ||
@ -15896,17 +15927,13 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
daemonObserver.Contains("AetheriaRuntimeReactiveObservedDaemonState", StringComparison.Ordinal) ||
daemonObserver.Contains(".ReactiveObservedDaemon()", StringComparison.Ordinal) ||
daemonObserver.Contains("reactive.TryCurrent(out var observed)", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument> _reactiveFrame", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeDaemonSoaViewDocument> _reactiveSoaView", StringComparison.Ordinal) ||
daemonObserver.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> _reactiveZoneRender", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveDaemonFrame()", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveDaemonSoaView()", StringComparison.Ordinal) ||
daemonObserver.Contains("state.ReactiveZoneRender()", StringComparison.Ordinal) ||
daemonObserver.Contains("AetheriaRuntimeObservedDaemonSession", StringComparison.Ordinal) ||
daemonObserver.Contains(".ObserveDaemon()", StringComparison.Ordinal) ||
daemonObserver.Contains("return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);", StringComparison.Ordinal) ||
daemonObserver.Contains("DisposeReactiveObservedDaemonDocuments()", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"AetheriaDaemonObserver still owns raw observed daemon document plumbing instead of the managed observed-daemon session.");
"AetheriaDaemonObserver still routes through observed-daemon compatibility wrappers instead of direct reactive documents.");
}
if (daemonObserver.Contains("ObserveAsync()", StringComparison.Ordinal))