Remove one-shot observed daemon access

This commit is contained in:
Meta Vens 2026-06-29 01:38:05 +01:00
commit a9e21eacef
3 changed files with 22 additions and 34 deletions

View file

@ -8117,7 +8117,6 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
"public Task<TDocument> LatestAsync<TDocument>()",
"public TDocument Latest<TDocument>()",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public AetheriaRuntimeObservedDaemonState? LatestObservedDaemon()",
"public AetheriaRuntimeObservedDockingState? CurrentDocking(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
"public CultMeshReactiveDocument<TDocument> Reactive<TDocument>(",
@ -8230,6 +8229,21 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
"ReactiveEditorTuiSurface(",
"ReactiveEditorTuiSurfaceAsync("
};
var forbiddenObservedDaemonConvenienceWrappers = new[]
{
"LatestObservedDaemonAsync(",
"LatestObservedDaemon()",
"TryReadDaemonSoaViewAsync("
};
var survivingObservedDaemonConvenienceWrappers = forbiddenObservedDaemonConvenienceWrappers
.Where(symbol => clientState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
if (survivingObservedDaemonConvenienceWrappers.Length > 0)
{
throw new InvalidOperationException(
"AetheriaClientState still exposes one-shot observed-daemon aggregate wrappers; use CurrentObservedDaemon() or generic typed document reads: " +
string.Join(", ", survivingObservedDaemonConvenienceWrappers));
}
var survivingFixedReactiveWrappers = forbiddenFixedReactiveWrappers
.Where(symbol => clientState.Contains(symbol, StringComparison.Ordinal))
.ToArray();
@ -15941,8 +15955,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
!observedDaemonState.Contains("CultMeshReactiveDocument<AetheriaRuntimeZoneRenderDocument> zoneRender", StringComparison.Ordinal) ||
!observedDaemonState.Contains("var currentZoneRender = zoneRender?.Current;", StringComparison.Ordinal) ||
!observedDaemonState.Contains("new AetheriaRuntimeObservedDaemonState(currentFrame, currentSoaView, currentZoneRender)", StringComparison.Ordinal) ||
!aetheriaClientState.Contains("var zoneRender = await LatestAsync<AetheriaRuntimeZoneRenderDocument>().ConfigureAwait(false);", StringComparison.Ordinal) ||
!aetheriaClientState.Contains("return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);", StringComparison.Ordinal))
!aetheriaClientState.Contains("using var zoneRender = Reactive<AetheriaRuntimeZoneRenderDocument>(options);", StringComparison.Ordinal) ||
!aetheriaClientState.Contains("AetheriaRuntimeObservedDaemonState.TryCreateCurrent(frame, soaView, zoneRender, out var current)", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"Observed zone-render state acquisition must sample managed typed zone-render documents directly.");
@ -16161,6 +16175,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
"state.LatestFrame.ReactiveAsync",
"state.LatestSoaView.ReactiveAsync",
"public static async Task<AetheriaRuntimeObservedDaemonState?> ReadAsync(",
"LatestObservedDaemonAsync(",
"LatestObservedDaemon()",
"public sealed class AetheriaRuntimeReactiveObservedDaemonState",
"ReactiveObservedDaemonAsync",
"ReactiveObservedDaemon(",

View file

@ -205,7 +205,7 @@ public class DaemonRuntimeDocumentTests
.GetResult();
using var zoneRenderReactive = client.State
.Reactive<AetheriaRuntimeZoneRenderDocument>();
var observed = client.State.LatestObservedDaemon();
var observed = client.State.CurrentObservedDaemon();
var observedAuthoritativeFrame = client.State.Latest<AetheriaRuntimeDaemonFrameDocument>();
using var catalogReactive = client.State.Reactive<AetheriaRuntimeCatalogSnapshot>();
using var daemonFrameReactive = client.State.Reactive<AetheriaRuntimeDaemonFrameDocument>();
@ -2216,7 +2216,7 @@ public class DaemonRuntimeDocumentTests
.OpenAsync(statePath, "unity-observer-test", pullOnOpen: true)
.GetAwaiter()
.GetResult();
var observed = client.State.LatestObservedDaemon();
var observed = client.State.CurrentObservedDaemon();
Assert.IsNotNull(observed);
Assert.IsTrue(observed.IsAuthoritative);
@ -2317,7 +2317,7 @@ public class DaemonRuntimeDocumentTests
.OpenAsync(statePath, "unity-frame-only-observer-test", pullOnOpen: true)
.GetAwaiter()
.GetResult();
var observed = client.State.LatestObservedDaemon();
var observed = client.State.CurrentObservedDaemon();
Assert.IsNotNull(observed);
Assert.IsTrue(observed.IsAuthoritative);

View file

@ -215,19 +215,6 @@ namespace GameCult.Aetheria.State.Verse
return Document<TDocument>().LatestAsync().ConfigureAwait(false).GetAwaiter().GetResult();
}
public async Task<AetheriaRuntimeObservedDaemonState?> LatestObservedDaemonAsync()
{
var frame = await LatestAsync<AetheriaRuntimeDaemonFrameDocument>().ConfigureAwait(false);
var soaView = await TryReadDaemonSoaViewAsync().ConfigureAwait(false);
var zoneRender = await LatestAsync<AetheriaRuntimeZoneRenderDocument>().ConfigureAwait(false);
return new AetheriaRuntimeObservedDaemonState(frame, soaView, zoneRender);
}
public AetheriaRuntimeObservedDaemonState? LatestObservedDaemon()
{
return LatestObservedDaemonAsync().ConfigureAwait(false).GetAwaiter().GetResult();
}
public AetheriaRuntimeObservedDaemonState? CurrentObservedDaemon(
CultMeshReactiveDocumentOptions? options = null)
{
@ -438,21 +425,6 @@ namespace GameCult.Aetheria.State.Verse
}
}
private async Task<AetheriaRuntimeDaemonSoaViewDocument?> TryReadDaemonSoaViewAsync()
{
try
{
var soaView = await LatestAsync<AetheriaRuntimeDaemonSoaViewDocument>().ConfigureAwait(false);
return string.Equals(soaView.Schema, AetheriaRuntimeDaemonSchemas.SoaView, StringComparison.Ordinal)
? soaView
: null;
}
catch (KeyNotFoundException)
{
return null;
}
}
public Observable<TDocument> Watch<TDocument>()
where TDocument : class
{