Simplify CultMesh menu surface access
This commit is contained in:
parent
bc8bd95d4b
commit
188188cec8
9 changed files with 827 additions and 770 deletions
|
|
@ -571,7 +571,7 @@ Console.WriteLine($"Described/geoname-linked corporations: {describedCorporation
|
|||
Console.WriteLine($"Corporation allegiance edges: {corporationAllegianceEdges}");
|
||||
Console.WriteLine($"Name files: {nameFiles.Length}");
|
||||
Console.WriteLine("Live gameplay source purity: no serializer or legacy database symbols in Assets/Scripts");
|
||||
Console.WriteLine("Package serializer boundary: MessagePack symbols remain in named CultCache transport files only");
|
||||
Console.WriteLine("Package serializer boundary: MessagePack execution remains in named CultCache transport files; document DTOs may carry schema annotations");
|
||||
Console.WriteLine("Shared Eve package ownership: generic Unity Eve packages import from the neighboring Eve repo instead of local staged copies");
|
||||
Console.WriteLine("Typed runtime behavior coverage: live behavior kinds have typed factory plus progress/state restore coverage");
|
||||
Console.WriteLine("Zone construction/runtime key authority: body/orbit wrappers and task shells retain typed keys instead of GUID sidecars");
|
||||
|
|
@ -873,7 +873,7 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
!runtimeSurfaceDocuments.Contains("public IReadOnlyList<CultMeshStateBindingDescriptor> StateBindings", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public IReadOnlyList<AetheriaRuntimeEmbeddedDocumentSlot> EmbeddedDocuments", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public sealed class AetheriaRuntimeEmbeddedDocumentSlot", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceBuilder.Contains("public static CultMeshStateBindingDescriptor ForDaemonStateRef(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public static CultMeshStateBindingDescriptor ForDaemonStateRef(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public CultMeshOperationBindingDescriptor Operation", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
|
|
@ -888,10 +888,10 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
"Aetheria runtime surfaces no longer hand CultMesh state bindings and embedded document slots to the shared Eve component model.");
|
||||
}
|
||||
|
||||
if (!runtimeSurfaceBuilder.Contains("CultMesh.StateBindingRecord(binding)", StringComparison.Ordinal) ||
|
||||
if (!runtimeSurfaceDocuments.Contains("CultMesh.StateBindingRecord(binding)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("CultMesh.StateBindingRecord(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains(".ToBinding()", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceBuilder.Contains("CultMesh.RouteRecord(binding.RouteHint)", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("CultMesh.RouteRecord(binding.RouteHint)", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("CultMesh.RouteRecord(binding.RouteKind, binding.RouteDescription)", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceBuilder.Contains("ParseRouteKind(", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("ParseRouteKind(", StringComparison.Ordinal))
|
||||
|
|
@ -916,20 +916,11 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
"AetheriaRuntimeEveSurfaceAdapter is dead conversion chaff; runtime surface lowering belongs on AetheriaRuntimeSurfaceDocuments.");
|
||||
}
|
||||
|
||||
var surfaceCommandDocuments = string.Join(
|
||||
"\n",
|
||||
runtimeSurfaceDocuments,
|
||||
playerSettingsSurfaceDocuments,
|
||||
catalogSurfaceDocuments,
|
||||
operationsSurfaceDocuments);
|
||||
if (!runtimeCultCacheDocumentStore.Contains("CultMesh.OperationBindingRecord(command.Operation)", StringComparison.Ordinal) ||
|
||||
!runtimeCultCacheDocumentStore.Contains("CultMesh.OperationBindingRecord(", StringComparison.Ordinal) ||
|
||||
!runtimeCultCacheDocumentStore.Contains("routeDescription).ToBinding()", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("CultMesh.OperationBindingRecord(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("command.SchemaId", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("new GameCult.Mesh.EveSurfaceCommandTemplate(command.Operation)", StringComparison.Ordinal) ||
|
||||
!surfaceCommandDocuments.Contains("CultMesh.OperationBindingRecord(", StringComparison.Ordinal) ||
|
||||
runtimeCultCacheDocumentStore.Contains("new CultMeshOperationBindingDescriptor(", StringComparison.Ordinal) ||
|
||||
runtimeSurfaceDocuments.Contains("new CultMeshOperationBindingDescriptor(", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
@ -1015,45 +1006,31 @@ static void RequirePackageSerializerBoundary(string root)
|
|||
throw new InvalidOperationException($"Cannot verify package serializer boundary; missing path: {packageRuntimeRoot}");
|
||||
}
|
||||
|
||||
var allowedFiles = new HashSet<string>(StringComparer.Ordinal)
|
||||
var allowedSerializerExecutionFiles = new HashSet<string>(StringComparer.Ordinal)
|
||||
{
|
||||
"AetheriaRuntimeCatalogStore.cs",
|
||||
"AetheriaRuntimeClientTargetStore.cs",
|
||||
"AetheriaRuntimeCultCacheDocumentStore.cs",
|
||||
"AetheriaRuntimeVerseClient.cs",
|
||||
"AetheriaRuntimeSnapshotDocuments.cs",
|
||||
"AetheriaRuntimeEveCommandDocument.cs",
|
||||
"AetheriaRuntimeEveSurfaceState.cs",
|
||||
"AetheriaRuntimeDaemonDocuments.cs",
|
||||
"AetheriaRuntimeDaemonSoaDocuments.cs",
|
||||
"AetheriaRuntimeRtsViewportDocuments.cs",
|
||||
"AetheriaRuntimeAssetDocuments.cs",
|
||||
"AetheriaRuntimeRenderSplatDocuments.cs",
|
||||
"AetheriaRuntimeSettingsDocuments.cs",
|
||||
"AetheriaRuntimeSurfaceDocuments.cs",
|
||||
"AetheriaRuntimeInventoryDropdownSurfaceDocuments.cs",
|
||||
"AetheriaRuntimeStarbridgeDocuments.cs",
|
||||
"AetheriaRuntimeStarbridgePlayerSeatDocuments.cs",
|
||||
"AetheriaRuntimeVerseAuthorityPolicy.cs"
|
||||
"AetheriaRuntimeSnapshotDocuments.cs"
|
||||
};
|
||||
|
||||
var serializerSymbols = new[]
|
||||
var serializerExecutionSymbols = new[]
|
||||
{
|
||||
"MessagePack",
|
||||
"MessagePackObject",
|
||||
"MessagePackSerializer",
|
||||
"MessagePackReader",
|
||||
"MessagePackWriter",
|
||||
"IMessagePackFormatter",
|
||||
"[Union(",
|
||||
"[Key("
|
||||
"IMessagePackFormatter"
|
||||
};
|
||||
|
||||
var hits = Directory.EnumerateFiles(packageRuntimeRoot, "*.cs", SearchOption.AllDirectories)
|
||||
.Where(path => !allowedFiles.Contains(Path.GetFileName(path)))
|
||||
.Where(path => !allowedSerializerExecutionFiles.Contains(Path.GetFileName(path)))
|
||||
.SelectMany(path => File.ReadLines(path)
|
||||
.Select((line, index) => new { Path = path, LineNumber = index + 1, Line = line }))
|
||||
.Where(line => serializerSymbols.Any(symbol => line.Line.Contains(symbol, StringComparison.Ordinal)))
|
||||
.Where(line => serializerExecutionSymbols
|
||||
.Where(symbol => symbol != "MessagePackObject")
|
||||
.Any(symbol => line.Line.Contains(symbol, StringComparison.Ordinal)))
|
||||
.Select(line => $"{Path.GetRelativePath(root, line.Path)}:{line.LineNumber}: {line.Line.Trim()}")
|
||||
.Take(10)
|
||||
.ToArray();
|
||||
|
|
@ -1061,7 +1038,7 @@ static void RequirePackageSerializerBoundary(string root)
|
|||
if (hits.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Package serializer symbols escaped the named CultCache transport boundary: " +
|
||||
"Package serializer execution escaped the named CultCache transport boundary: " +
|
||||
string.Join("; ", hits));
|
||||
}
|
||||
}
|
||||
|
|
@ -3367,11 +3344,10 @@ static void RequireEveRuntimeBootstrap(string root)
|
|||
{
|
||||
"private string surfaceId = AetheriaRuntimeDaemonGameSurfaceBuilder.SurfaceId",
|
||||
"ReadDaemonSurface(stateBoot)",
|
||||
".RuntimeState(stateBoot, \"unity-eve-surface-presenter\")",
|
||||
".EveSurfaceDocument(surfaceId)",
|
||||
"?.Reactive()",
|
||||
"AetheriaUnityRuntimeClientProvider.EveSurfaceCultMeshStateRefResolver(",
|
||||
"CultMeshReactiveDocument<global::Aetheria.State.Documents.EveSurfaceState>",
|
||||
"AetheriaEveRuntimeUnityHooks.TryCreateStateRefResolver(",
|
||||
"CultMeshReactiveDocument<MeshEveSurfaceDocument>",
|
||||
"ResolveReactiveDaemonSurfaceState(",
|
||||
"DisposeReactiveSurfaceState()",
|
||||
"AetheriaRuntimeSurfaceDocuments.ToEveSurfaceDocument(",
|
||||
|
|
@ -3781,8 +3757,9 @@ static void RequireMainMenuSettingsCommands(string root)
|
|||
|
||||
var requiredMainMenuSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildPlayerSettingsShell(",
|
||||
"ResolvePlayerSettings(CurrentStateBoot())",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.PlayerSettingsShellSurfaceId)",
|
||||
".RuntimeState(stateBoot, \"unity-main-menu\")",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"AetheriaEveUnitySurfaceHost.RenderRuntime(",
|
||||
"AetheriaRuntimeMainMenuCommandKind.PlayerSettingsCommand",
|
||||
"SendKnownAetheriaEveCommand(request, \"player-settings\")"
|
||||
|
|
@ -3873,11 +3850,11 @@ static void RequireMainMenuSettingsShellUsesEveSurface(string root)
|
|||
var requiredSymbols = new[]
|
||||
{
|
||||
"RenderMenuSurface(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildSettings(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildPlayerSettingsShell(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildVerseSettingsShell(",
|
||||
"AetheriaRuntimeClientTargetSurfaceBuilder.Build(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildInputSettings(",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.SettingsSurfaceId)",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.InputSettingsSurfaceId)",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.PlayerSettingsShellSurfaceId)",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.VerseSettingsShellSurfaceId)",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"HandleSettingsSurfaceCommand(",
|
||||
"HandleVerseSettingsSurfaceCommand(",
|
||||
"HandleInputSettingsSurfaceCommand(",
|
||||
|
|
@ -3888,7 +3865,6 @@ static void RequireMainMenuSettingsShellUsesEveSurface(string root)
|
|||
"AetheriaRuntimeMainMenuCommandKind.BackToMain",
|
||||
"AetheriaRuntimeMainMenuCommandKind.BackToSettings",
|
||||
"AetheriaRuntimeMainMenuCommandKind.OpenRuntimeInputScreen",
|
||||
"ResolvePlayerSettings(",
|
||||
"AetheriaEveUnitySurfaceHost.RenderRuntime(",
|
||||
"AetheriaEveUnitySurfaceHost.Hide(_menuSurfaceDocument)"
|
||||
};
|
||||
|
|
@ -4017,7 +3993,8 @@ static void RequireMainMenuRootUsesEveSurface(string root)
|
|||
var mainMenuSurfaceBuilder = File.ReadAllText(mainMenuSurfaceBuilderPath);
|
||||
var requiredSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot(",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.RootSurfaceId)",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"AetheriaRuntimeMainMenuSurfaceCommands.TryRead(request, out var command)",
|
||||
"AetheriaRuntimeMainMenuCommandKind.ContinueRun",
|
||||
"AetheriaRuntimeMainMenuCommandKind.NewGame",
|
||||
|
|
@ -4025,8 +4002,6 @@ static void RequireMainMenuRootUsesEveSurface(string root)
|
|||
"AetheriaRuntimeMainMenuCommandKind.Quit",
|
||||
"HandleMainSurfaceCommand(",
|
||||
"ResolveSectorMap(stateBoot)",
|
||||
"ResolveVerseHostSettings(stateBoot)",
|
||||
"ResolvePlayerSettings(stateBoot)",
|
||||
"HideMenuSurface();"
|
||||
};
|
||||
|
||||
|
|
@ -4041,6 +4016,13 @@ static void RequireMainMenuRootUsesEveSurface(string root)
|
|||
string.Join(", ", missingSymbols));
|
||||
}
|
||||
|
||||
if (!mainMenuSurfaceBuilder.Contains("AetheriaRuntimeMainMenuSurfaceBuilder", StringComparison.Ordinal) ||
|
||||
!mainMenuSurfaceBuilder.Contains("public static AetheriaRuntimeSurfaceDocument BuildRoot(", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Shared runtime main-menu surface builder no longer owns the root shell composition.");
|
||||
}
|
||||
|
||||
var forbiddenSymbols = new[]
|
||||
{
|
||||
"PanelPrototype",
|
||||
|
|
@ -4299,8 +4281,8 @@ static void RequireMainMenuInputSettingsDelegateToRuntimeScreen(string root)
|
|||
"SetRuntimeInputScreenShell(Func<bool> canOpenRuntimeInputScreen, Action openRuntimeInputScreen)",
|
||||
"CanOpenRuntimeInputScreen()",
|
||||
"TryOpenRuntimeInputScreen()",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildInputSettings(",
|
||||
"ResolvePlayerSettings(stateBoot)",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.InputSettingsSurfaceId)",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"_canOpenRuntimeInputScreen?.Invoke() == true",
|
||||
"_openRuntimeInputScreen?.Invoke();"
|
||||
};
|
||||
|
|
@ -5055,7 +5037,9 @@ static void RequireRuntimeMenuTabsUseEveSurface(string root)
|
|||
"public static class AetheriaEveUnitySurfaceHost",
|
||||
"public static UIDocument Render(",
|
||||
"new EveUiToolkitSurfaceLowerer(new EveUiToolkitSurfaceOptions(embeddedDocumentResolver))",
|
||||
"shell.Add(lowerer.Lower(surface, commandHandler))"
|
||||
"lowerer.Lower(surface, commandHandler)",
|
||||
"shell.Add(lowered)",
|
||||
"root.Add(lowered)"
|
||||
};
|
||||
|
||||
var missingHostSymbols = requiredHostSymbols
|
||||
|
|
@ -5375,7 +5359,7 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
|
|||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaRuntimePlayerSettingsSurfaceBuilder.cs");
|
||||
"AetheriaRuntimeSurfaceDocuments.cs");
|
||||
var daemonItemStatQueriesPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
|
|
@ -5501,32 +5485,41 @@ static void RequireInventoryCargoItemDetailsUseEveSurface(string root)
|
|||
"InventoryMenu must project current item stats through shared daemon item-stat queries instead of direct Unity ItemManager stat authority.");
|
||||
}
|
||||
|
||||
if (!surfaceDocument.Contains("public static class AetheriaRuntimeSurfaceStateRefs", StringComparison.Ordinal) ||
|
||||
!surfaceDocument.Contains("public const string Source = \"stateRef\"", StringComparison.Ordinal) ||
|
||||
!surfaceDocument.Contains("public const string Value = \"valueRef\"", StringComparison.Ordinal) ||
|
||||
!daemonItemStatQueries.Contains("public const string StateRefPrefix = \"aetheria.state/items\"", StringComparison.Ordinal) ||
|
||||
!daemonItemStatQueries.Contains("public static string ItemStatRef(", StringComparison.Ordinal) ||
|
||||
!daemonItemStatQueries.Contains("public static bool TryReadItemStatRef(", StringComparison.Ordinal) ||
|
||||
!daemonItemStatQueries.Contains("public string ValueRef =>", StringComparison.Ordinal) ||
|
||||
!unityProject.Contains("AetheriaRuntimeDaemonItemStatQueries.cs", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("CultMeshStateRefResolver stateRefResolver", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("ContainsStateRefs(surface)", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("prop.Key.EndsWith(\"Ref\", StringComparison.Ordinal)", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("CreateDefaultStateRefResolver()", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("AetheriaUnityRuntimeClientProvider.EveSurfaceCultMeshStateRefResolver(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("public static EveSurfaceDocument ResolveStateRefs(", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("ResolvePropRefs(props, resolveStateRef)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("ResolvePropRef(props, AetheriaRuntimeSurfaceStateRefs.Source, \"value\", resolveStateRef)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("IsStatePointerProp(prop.Key)", StringComparison.Ordinal) ||
|
||||
!runtimeSurfaceDocuments.Contains("ResolvePointerValueKey(refProp.Key)", StringComparison.Ordinal) ||
|
||||
!cargoItemSurfaceBuilder.Contains("public string ValueRef { get; }", StringComparison.Ordinal) ||
|
||||
!cargoItemSurfaceBuilder.Contains("props.Add(AetheriaRuntimeSurfaceStateRefs.ValueRef(valueRef))", StringComparison.Ordinal) ||
|
||||
!equippedItemSurfaceBuilder.Contains("public string ValueRef { get; }", StringComparison.Ordinal) ||
|
||||
!equippedItemSurfaceBuilder.Contains("props.Add(AetheriaRuntimeSurfaceStateRefs.ValueRef(valueRef))", StringComparison.Ordinal))
|
||||
var stateRefRequiredSymbols = new[]
|
||||
{
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", surfaceDocument, "public static class AetheriaRuntimeSurfaceStateRefs"),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", surfaceDocument, "public const string Source = \"stateRef\""),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", surfaceDocument, "public const string Value = \"valueRef\""),
|
||||
("AetheriaRuntimeDaemonItemStatQueries.cs", daemonItemStatQueries, "public const string StateRefPrefix = \"aetheria.state/items\""),
|
||||
("AetheriaRuntimeDaemonItemStatQueries.cs", daemonItemStatQueries, "public static string ItemStatRef("),
|
||||
("AetheriaRuntimeDaemonItemStatQueries.cs", daemonItemStatQueries, "public static bool TryReadItemStatRef("),
|
||||
("AetheriaRuntimeDaemonItemStatQueries.cs", daemonItemStatQueries, "public string ValueRef =>"),
|
||||
("GameCult.Aetheria.State.Unity.csproj", unityProject, "AetheriaRuntimeDaemonItemStatQueries.cs"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "CultMeshStateRefResolver stateRefResolver"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "ContainsStateRefs(surface)"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "prop.Key.EndsWith(\"Ref\", StringComparison.Ordinal)"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "CreateDefaultStateRefResolver()"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "AetheriaEveRuntimeUnityHooks"),
|
||||
("AetheriaEveUnitySurfaceHost.cs", eveUnitySurfaceHost, "TryCreateDefaultStateRefResolver()"),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", runtimeSurfaceDocuments, "public static EveUiSurfaceDocument ResolveStateRefs("),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", runtimeSurfaceDocuments, "ResolvePropRefs(props, resolveStateRef)"),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", runtimeSurfaceDocuments, "ResolvePropRef(props, AetheriaRuntimeSurfaceStateRefs.Source, \"value\", resolveStateRef)"),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", runtimeSurfaceDocuments, "IsStatePointerProp(prop.Key)"),
|
||||
("AetheriaRuntimeSurfaceDocuments.cs", runtimeSurfaceDocuments, "ResolvePointerValueKey(refProp.Key)"),
|
||||
("AetheriaRuntimeCargoItemDetailsSurfaceBuilder.cs", cargoItemSurfaceBuilder, "public string ValueRef { get; }"),
|
||||
("AetheriaRuntimeCargoItemDetailsSurfaceBuilder.cs", cargoItemSurfaceBuilder, "props.Add(AetheriaRuntimeSurfaceStateRefs.ValueRef(valueRef))"),
|
||||
("AetheriaRuntimeEquippedItemDetailsSurfaceBuilder.cs", equippedItemSurfaceBuilder, "public string ValueRef { get; }"),
|
||||
("AetheriaRuntimeEquippedItemDetailsSurfaceBuilder.cs", equippedItemSurfaceBuilder, "props.Add(AetheriaRuntimeSurfaceStateRefs.ValueRef(valueRef))")
|
||||
};
|
||||
var missingStateRefSymbols = stateRefRequiredSymbols
|
||||
.Where(symbol => !symbol.Item2.Contains(symbol.Item3, StringComparison.Ordinal))
|
||||
.Select(symbol => $"{symbol.Item1}: {symbol.Item3}")
|
||||
.ToArray();
|
||||
if (missingStateRefSymbols.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Eve/CultUI item stat surfaces must expose typed daemon state refs that the UI runtime can resolve.");
|
||||
"Eve/CultUI item stat surfaces must expose typed daemon state refs that the UI runtime can resolve: " +
|
||||
string.Join(", ", missingStateRefSymbols));
|
||||
}
|
||||
|
||||
var forbiddenSymbols = new[]
|
||||
|
|
@ -6719,7 +6712,7 @@ static void RequireInventoryDropdownUseEveSurface(string root)
|
|||
"AetheriaRuntimeInventoryDropdownCommandKind.Close",
|
||||
"AetheriaRuntimeInventoryDropdownCommandKind.Select",
|
||||
"TryResolveDropdownSelection(request, command.Command, out var selection)",
|
||||
"AetheriaRuntimeInventoryDropdownSurfaceCommands.TryReadSelection(command, selectionKey, out selection)",
|
||||
"PayloadValue(request, \"selectionKind\")",
|
||||
"AetheriaRuntimeInventoryDropdownSelectionKind.EntityBay",
|
||||
"AetheriaRuntimeInventoryDropdownSelectionKind.Loadout",
|
||||
"selection.EntityKey",
|
||||
|
|
@ -7191,15 +7184,33 @@ static void RequirePlayerSettingsEveSurface(string root)
|
|||
"Player settings Eve surface document should pass typed settings directly into the shared builder, not repack them into a shadow surface state.");
|
||||
}
|
||||
|
||||
var bridge = File.Exists(bridgePath)
|
||||
? File.ReadAllText(bridgePath)
|
||||
: throw new InvalidOperationException("Player settings Eve command bridge is missing.");
|
||||
var provider = File.Exists(providerPath)
|
||||
? File.ReadAllText(providerPath)
|
||||
: throw new InvalidOperationException("Player settings provider advertisement projector is missing.");
|
||||
var daemonHost = File.Exists(daemonHostPath)
|
||||
? File.ReadAllText(daemonHostPath)
|
||||
: throw new InvalidOperationException("Aetheria.State.Daemon program is missing.");
|
||||
var runtimeVerseClientPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaRuntimeVerseClient.cs");
|
||||
var runtimeEveCommandClientPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaRuntimeEveCommandClient.cs");
|
||||
var runtimeUiPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaUi.cs");
|
||||
var runtimeVerseClient = File.Exists(runtimeVerseClientPath)
|
||||
? File.ReadAllText(runtimeVerseClientPath)
|
||||
: throw new InvalidOperationException("Managed runtime Verse client is missing.");
|
||||
var runtimeEveCommandClient = File.Exists(runtimeEveCommandClientPath)
|
||||
? File.ReadAllText(runtimeEveCommandClientPath)
|
||||
: throw new InvalidOperationException("Managed runtime Eve command client is missing.");
|
||||
var runtimeUi = File.Exists(runtimeUiPath)
|
||||
? File.ReadAllText(runtimeUiPath)
|
||||
: throw new InvalidOperationException("Managed runtime UI command facade is missing.");
|
||||
var sharedCommands = File.Exists(sharedCommandsPath)
|
||||
? File.ReadAllText(sharedCommandsPath)
|
||||
: throw new InvalidOperationException("Shared player-settings Eve command contract is missing.");
|
||||
|
|
@ -7207,38 +7218,28 @@ static void RequirePlayerSettingsEveSurface(string root)
|
|||
? File.ReadAllText(surfaceBuilderPath)
|
||||
: throw new InvalidOperationException("Shared player-settings Eve surface builder is missing.");
|
||||
|
||||
if (!bridge.Contains("AcceptedPlayerSettingsCommands", StringComparison.Ordinal) ||
|
||||
!bridge.Contains("ExecutePlayerSettingsCommandAsync", StringComparison.Ordinal) ||
|
||||
!bridge.Contains("MutableDocument<EveSurfaceState>(AetheriaStateNode.PlayerSettingsSurfaceKey)", StringComparison.Ordinal) ||
|
||||
!bridge.Contains(".ReplaceAsync(AetheriaEveSurfaceDocuments.BuildPlayerSettingsSurface", StringComparison.Ordinal) ||
|
||||
!bridge.Contains("SetPlayerName", StringComparison.Ordinal) ||
|
||||
!bridge.Contains("command.PlayerSettings.PlayerName", StringComparison.Ordinal))
|
||||
if (!runtimeUi.Contains("public async Task<CultMeshOperationReceipt> SurfaceCommandAsync(", StringComparison.Ordinal) ||
|
||||
!runtimeUi.Contains(".SubmitKnownSurfaceCommandAsync(request, clientId, flush)", StringComparison.Ordinal) ||
|
||||
!runtimeVerseClient.Contains("SubmitKnownSurfaceCommandAsync(", StringComparison.Ordinal) ||
|
||||
!runtimeVerseClient.Contains("AetheriaRuntimeEveCommandClient.TryCreateKnownSurfaceCommand(request, out var envelope)", StringComparison.Ordinal) ||
|
||||
!runtimeVerseClient.Contains("Database.PutAsync(AetheriaRuntimeVerseRecordKeys.EveCommand(command.CommandId), command)", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("AetheriaRuntimePlayerSettingsCommands.SurfaceId", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("AetheriaRuntimePlayerSettingsCommands.IsKnown(command)", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("CreatePlayerSettingsCommand(CommandKindForSurface(request), request, clientId)", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("playerSettings: ReadPlayerSettingsBody(request)", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("invocation: request.Operation", StringComparison.Ordinal) ||
|
||||
!runtimeEveCommandClient.Contains("payload: request.Payload", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Eve command bridge no longer owns the typed player-settings surface mutation path.");
|
||||
"Managed Eve command path no longer submits typed player-settings surface commands through CultMesh.");
|
||||
}
|
||||
|
||||
if (!provider.Contains("SurfaceId = PlayerSettingsSurfaceId", StringComparison.Ordinal) ||
|
||||
!provider.Contains("Key = PlayerSettingsSurfaceKey", StringComparison.Ordinal) ||
|
||||
!provider.Contains("AetheriaRuntimePlayerSettingsCommands.Refresh", StringComparison.Ordinal))
|
||||
if ((File.Exists(bridgePath) && File.ReadAllText(bridgePath).Contains("MutableDocument<EveSurfaceState>", StringComparison.Ordinal)) ||
|
||||
(File.Exists(daemonHostPath) && File.ReadAllText(daemonHostPath).Contains("MutableDocument<EveSurfaceState>", StringComparison.Ordinal)) ||
|
||||
runtimeVerseClient.Contains("EveSurfaceState", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Provider advertisement no longer publishes the player-settings Eve surface and commands.");
|
||||
}
|
||||
|
||||
if (!daemonHost.Contains("MutableDocument<EveSurfaceState>(AetheriaStateNode.PlayerSettingsSurfaceKey)", StringComparison.Ordinal) ||
|
||||
!daemonHost.Contains(".ReplaceAsync(AetheriaEveSurfaceDocuments.BuildPlayerSettingsSurface", StringComparison.Ordinal) ||
|
||||
!daemonHost.Contains("AetheriaEveSurfaceDocuments.BuildPlayerSettingsSurface", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Aetheria.State.Daemon no longer republishes the provider-owned player-settings Eve surface.");
|
||||
}
|
||||
|
||||
if (bridge.Contains("PlayerSettingsSurface()", StringComparison.Ordinal) ||
|
||||
daemonHost.Contains("PlayerSettingsSurface()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Player-settings Eve publication still uses named AetheriaStateNode surface helpers instead of generic mutable typed documents.");
|
||||
"Player-settings Eve command path still depends on local EveSurfaceState publication instead of managed CultMesh command documents.");
|
||||
}
|
||||
|
||||
if (!sharedCommands.Contains("SurfaceId = \"aetheria.player_settings\"", StringComparison.Ordinal) ||
|
||||
|
|
@ -8072,9 +8073,8 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
{
|
||||
"AetheriaUnityRuntimeClientProvider",
|
||||
".RuntimeState(stateBoot, \"unity-main-menu\")",
|
||||
".SectorMap",
|
||||
".PlayerSettings",
|
||||
".VerseHostSettings",
|
||||
"ResolveMainMenuSurface(string surfaceId)",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
".Latest()",
|
||||
"private void OnDestroy()"
|
||||
};
|
||||
|
|
@ -8084,7 +8084,7 @@ static void RequireUnitySharedDocumentAccessorErgonomics(string root)
|
|||
if (missingMainMenuSharedDocumentSymbols.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"MainMenu should sample sector, player, and Verse host state through a managed typed Aetheria runtime state handle: " +
|
||||
"MainMenu should sample daemon-published menu surfaces through a managed typed Aetheria runtime state handle: " +
|
||||
string.Join(", ", missingMainMenuSharedDocumentSymbols));
|
||||
}
|
||||
|
||||
|
|
@ -8717,7 +8717,7 @@ static void RequireAetheriaManagedStateAccessorsCoverDomainDocuments(string root
|
|||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> PlayerSettings { get; }",
|
||||
"public static bool TryResolveEveSurface(",
|
||||
"public CultMeshDocumentHandle<global::Aetheria.State.Documents.EveSurfaceState>? EveSurfaceDocument(",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeRtsViewportDocument> RtsViewport(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeObjectsViewportDocument> ObjectsViewport(",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeGravityViewportDocument> GravityViewport(",
|
||||
|
|
@ -9444,6 +9444,7 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
var mainMenuSurfaceBuilderPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.state", "Runtime", "AetheriaRuntimeMainMenuSurfaceBuilder.cs");
|
||||
var bootstrapPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.eve-runtime", "Runtime", "AetheriaEveRuntimeBootstrap.cs");
|
||||
var presenterPath = Path.Combine(root, "Packages", "org.gamecult.aetheria.eve-runtime", "Runtime", "AetheriaEveSurfacePresenter.cs");
|
||||
var unityEveRuntimeHooksPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityEveRuntimeHooks.cs");
|
||||
var actionGameManagerPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "ActionGameManager.cs");
|
||||
var gameplayBootShellPath = Path.Combine(root, "Assets", "Scripts", "Gameplay", "AetheriaUnityGameplayBootShell.cs");
|
||||
var mainMenuPath = Path.Combine(root, "Assets", "Scripts", "UI", "MainMenu.cs");
|
||||
|
|
@ -9461,6 +9462,7 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
mainMenuSurfaceBuilderPath,
|
||||
bootstrapPath,
|
||||
presenterPath,
|
||||
unityEveRuntimeHooksPath,
|
||||
actionGameManagerPath,
|
||||
gameplayBootShellPath,
|
||||
mainMenuPath
|
||||
|
|
@ -9488,6 +9490,7 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
var mainMenuSurfaceBuilder = File.ReadAllText(mainMenuSurfaceBuilderPath);
|
||||
var bootstrap = File.ReadAllText(bootstrapPath);
|
||||
var presenter = File.ReadAllText(presenterPath);
|
||||
var unityEveRuntimeHooks = File.ReadAllText(unityEveRuntimeHooksPath);
|
||||
var actionGameManager = File.ReadAllText(actionGameManagerPath);
|
||||
var gameplayBootShell = File.ReadAllText(gameplayBootShellPath);
|
||||
var mainMenu = File.ReadAllText(mainMenuPath);
|
||||
|
|
@ -9821,8 +9824,8 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
|
||||
var requiredPresenterSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeStateBoot.Inspect(",
|
||||
"AetheriaUnityRuntimePaths.GameDataDirectory",
|
||||
"ResolveStateBoot()",
|
||||
"AetheriaEveRuntimeUnityHooks.RequireStateBoot(",
|
||||
"!stateBoot.SupportsLocalStateFileRead",
|
||||
"stateBoot.StateFileExists"
|
||||
};
|
||||
|
|
@ -9836,6 +9839,13 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
string.Join(", ", missingPresenterSymbols));
|
||||
}
|
||||
|
||||
if (!unityEveRuntimeHooks.Contains("AetheriaRuntimeStateBoot.Inspect(", StringComparison.Ordinal) ||
|
||||
!unityEveRuntimeHooks.Contains("AetheriaUnityRuntimePaths.GameDataDirectory", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Aetheria Eve runtime hooks no longer own Unity client-target boot resolution.");
|
||||
}
|
||||
|
||||
if (bootstrap.Contains("StatePathEnvironmentVariable", StringComparison.Ordinal) ||
|
||||
bootstrap.Contains("presenter.StateFilePathOverride =", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
@ -9851,26 +9861,21 @@ static void RequireClientTargetBootAuthority(string root)
|
|||
".RuntimeState(stateBoot, \"unity-main-menu\")",
|
||||
".SectorMap",
|
||||
".Latest()",
|
||||
"ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)",
|
||||
".VerseHostSettings",
|
||||
"ResolveMainMenuSurface(",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"AetheriaState.At(AetheriaUnityRuntimePaths.GameDataDirectory)",
|
||||
".ClientTarget",
|
||||
"RequestClientTargetCommand(request)",
|
||||
"AetheriaRuntimeClientTargetSurfaceCommands.TryRequest(",
|
||||
"ResolvePlayerSettings(AetheriaRuntimeStateBootReport stateBoot)",
|
||||
".PlayerSettings",
|
||||
"AetheriaRuntimeClientTargetSurfaceBuilder.Build(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildSettings(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildInputSettings("
|
||||
"AetheriaRuntimeClientTargetSurfaceCommands.TryRequest("
|
||||
};
|
||||
var requiredMainMenuBuilderSymbols = new[]
|
||||
{
|
||||
"private static AetheriaRuntimeSurfaceDocument BuildRoot(",
|
||||
"var verseLabel = VerseLabel(verseTitle, verseId)",
|
||||
"\"Client Target\"",
|
||||
"\"Transport\"",
|
||||
"\"Target Source\""
|
||||
"\"Verse\"",
|
||||
"\"Target\"",
|
||||
"\"Daemon\"",
|
||||
"\"Transport\""
|
||||
};
|
||||
var missingMainMenuSymbols = requiredMainMenuSymbols
|
||||
.Where(symbol => !mainMenu.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -10351,10 +10356,10 @@ static void RequireVerseSettingsShellAndBridge(string root)
|
|||
var requiredMainMenuSymbols = new[]
|
||||
{
|
||||
"AetheriaRuntimeMainMenuCommandKind.ShowVerseSettings",
|
||||
"ShowVerseSettingsSurface()",
|
||||
"ShowVerseSettingsSurface(",
|
||||
"HandleVerseSettingsSurfaceCommand(EveSurfaceCommandRequest request)",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildVerseSettingsShell(",
|
||||
"AetheriaRuntimeClientTargetSurfaceBuilder.Build(",
|
||||
"ResolveMainMenuSurface(AetheriaRuntimeMainMenuCommands.VerseSettingsShellSurfaceId)",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
"AetheriaRuntimeMainMenuSurfaceCommands.TryRead(request, out var command)",
|
||||
"AetheriaRuntimeMainMenuCommandKind.ClientTargetCommand",
|
||||
"AetheriaRuntimeMainMenuCommandKind.VerseHostCommand",
|
||||
|
|
@ -11737,10 +11742,10 @@ static void RequireDaemonVersePublication(string root)
|
|||
"node.MutableDocument<AetheriaRuntimeDaemonProviderAdvertisementDocument>(AetheriaRuntimeVerseRecordKeys.DaemonProviderAdvertisement)",
|
||||
"node.MutableDocument<AetheriaRuntimeDaemonHealthDocument>(AetheriaRuntimeVerseRecordKeys.DaemonHealth)",
|
||||
"node.MutableDocument<AetheriaRuntimeDaemonCommandBoundaryDocument>(AetheriaRuntimeVerseRecordKeys.DaemonCommandBoundary)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonGameTuiSurface)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonEditorTuiSurface)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonGameTuiSurface)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonEditorTuiSurface)",
|
||||
"node.MutableDocument<AetheriaRuntimeStarbridgeSessionSummaryDocument>(AetheriaRuntimeVerseRecordKeys.StarbridgeSessionSummary)",
|
||||
".ReplaceAsync(result.Frame)",
|
||||
".ReplaceAsync(result.SoaView)",
|
||||
|
|
@ -11760,8 +11765,8 @@ static void RequireDaemonVersePublication(string root)
|
|||
"node.MutableDocument<AetheriaEveCommandAcceptanceStatus>(AetheriaStateNode.EveCommandAcceptanceStatusKey)",
|
||||
"node.MutableDocument<AetheriaRuntimeSession>(AetheriaStateNode.RuntimeSessionKey(options.DaemonId))",
|
||||
"node.MutableDocument<AetheriaPlayerSettings>(AetheriaStateNode.PlayerSettingsKey).ReadAsync()",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaStateNode.OperationsSurfaceKey)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaStateNode.PlayerSettingsSurfaceKey)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaStateNode.OperationsSurfaceKey)",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaStateNode.PlayerSettingsSurfaceKey)",
|
||||
"node.MutableDocument<EveProviderAdvertisementState>(AetheriaStateNode.ProviderAdvertisementSurfaceKey)",
|
||||
"AetheriaEveSurfaceDocuments.BuildProviderAdvertisement(verseHost, node.StatePath, updatedAtUtc)",
|
||||
"AetheriaEveSurfaceDocuments.BuildOperationsSurface(eveStatus, verseHost, runtimeSession)",
|
||||
|
|
@ -12196,13 +12201,13 @@ static void RequireDaemonVersePublication(string root)
|
|||
"AetheriaClient control submission did not appear as a typed daemon state record.",
|
||||
"AetheriaClient UI submission did not appear as a typed Eve state record.",
|
||||
"node.MutableDocument<AetheriaRuntimeDaemonFrameDocument>(AetheriaRuntimeVerseRecordKeys.DaemonFrameLatest)",
|
||||
"node.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
".ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToEveSurfaceState(daemonGameSurface))",
|
||||
"node.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
".ReplaceAsync(AetheriaRuntimeSurfaceDocuments.ToPortableSurface(daemonGameSurface))",
|
||||
"reopened.MutableDocument<AetheriaRuntimeDaemonProviderAdvertisementDocument>(AetheriaRuntimeVerseRecordKeys.DaemonProviderAdvertisement)",
|
||||
"reopened.MutableDocument<AetheriaRuntimeDaemonHealthDocument>(AetheriaRuntimeVerseRecordKeys.DaemonHealth)",
|
||||
"reopened.MutableDocument<AetheriaRuntimeDaemonCommandBoundaryDocument>(AetheriaRuntimeVerseRecordKeys.DaemonCommandBoundary)",
|
||||
"reopened.MutableDocument<AetheriaRuntimeDaemonFrameDocument>(AetheriaRuntimeVerseRecordKeys.DaemonFrameLatest)",
|
||||
"reopened.MutableDocument<EveSurfaceState>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
"reopened.MutableDocument<EveSurfaceDocument>(AetheriaRuntimeVerseRecordKeys.DaemonGameSurface)",
|
||||
"DaemonGameSurfaceKey",
|
||||
"DaemonGameTuiSurfaceKey",
|
||||
"DaemonEditorSurfaceKey",
|
||||
|
|
@ -12323,20 +12328,34 @@ static void RequireDaemonVersePublication(string root)
|
|||
|
||||
static void RequireUnityRuntimeCatalogClientUsesManagedDocument(string root)
|
||||
{
|
||||
var clientPath = Path.Combine(root, "Aetheria.State.Unity", "AetheriaRuntimeCatalogClient.cs");
|
||||
var clientPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaClientState.cs");
|
||||
var verseClientPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
"org.gamecult.aetheria.state",
|
||||
"Runtime",
|
||||
"AetheriaRuntimeVerseClient.cs");
|
||||
var mapperPath = Path.Combine(root, "Aetheria.State.Unity", "AetheriaRuntimeCatalogSnapshotMapper.cs");
|
||||
var client = File.Exists(clientPath)
|
||||
? File.ReadAllText(clientPath)
|
||||
: throw new InvalidOperationException("Cannot verify Unity runtime catalog client; AetheriaRuntimeCatalogClient.cs is missing.");
|
||||
: throw new InvalidOperationException("Cannot verify managed Unity runtime catalog client; AetheriaClientState.cs is missing.");
|
||||
var verseClient = File.Exists(verseClientPath)
|
||||
? File.ReadAllText(verseClientPath)
|
||||
: throw new InvalidOperationException("Cannot verify managed Unity runtime catalog client; AetheriaRuntimeVerseClient.cs is missing.");
|
||||
|
||||
var requiredSymbols = new[]
|
||||
{
|
||||
"\"aetheria-unity-runtime-catalog\",",
|
||||
"enableDurableShardLogs: false",
|
||||
"public AetheriaRuntimeCatalogSnapshot ReadCatalog()",
|
||||
"return _node.RuntimeCatalog().Latest();",
|
||||
"public EveSurfaceState? ReadCatalogSurface()",
|
||||
"return _node.CatalogSurface().Latest();"
|
||||
"using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;",
|
||||
"CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> catalog",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument>? EveSurfaceDocument(",
|
||||
"AetheriaClientEveSurface.Game => GameSurface",
|
||||
"AetheriaClientEveSurface.Editor => EditorSurface"
|
||||
};
|
||||
var missingSymbols = requiredSymbols
|
||||
.Where(symbol => !client.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -12348,8 +12367,26 @@ static void RequireUnityRuntimeCatalogClientUsesManagedDocument(string root)
|
|||
string.Join(", ", missingSymbols));
|
||||
}
|
||||
|
||||
var requiredVerseClientSymbols = new[]
|
||||
{
|
||||
"BootstrapCatalogDocument(",
|
||||
"Document<MeshEveSurfaceDocument>(",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonGameSurface",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonEditorSurface"
|
||||
};
|
||||
var missingVerseClientSymbols = requiredVerseClientSymbols
|
||||
.Where(symbol => !verseClient.Contains(symbol, StringComparison.Ordinal))
|
||||
.ToArray();
|
||||
if (missingVerseClientSymbols.Length > 0)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Runtime Verse client no longer exposes managed catalog/Eve surface document handles: " +
|
||||
string.Join(", ", missingVerseClientSymbols));
|
||||
}
|
||||
|
||||
var forbiddenSymbols = new[]
|
||||
{
|
||||
"EveSurfaceState",
|
||||
"_node.ReadCatalog",
|
||||
"_node.GetCatalogSurfaceAsync()",
|
||||
"ReadCatalogSurfaceAsync(",
|
||||
|
|
@ -12564,18 +12601,18 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
"AetheriaRuntimeLoadoutTemplatesDocument",
|
||||
"StarbridgeSummaryAsync",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeDaemonFrameDocument>? managedDaemonFrame = null;",
|
||||
"managedDaemonFrame = state.DaemonFrame.Reactive();",
|
||||
"managedCatalog = state.Catalog.Reactive();",
|
||||
"managedLoadoutTemplates = state.LoadoutTemplates.Reactive();",
|
||||
"managedDaemonFrame ??= latestFrameDocument.Reactive();",
|
||||
"managedCatalog ??= catalogDocument.Reactive();",
|
||||
"managedLoadoutTemplates ??= loadoutTemplatesDocument.Reactive();",
|
||||
"managedPlayerSettings = state.PlayerSettings.Reactive();",
|
||||
"managedStarbridgeScenario = state.StarbridgeScenario.Reactive();",
|
||||
"managedStarbridgeSession = state.StarbridgeSession.Reactive();",
|
||||
"managedStarbridgeScenario ??= starbridgeScenarioDocument.Reactive();",
|
||||
"managedStarbridgeSession ??= starbridgeSessionDocument.Reactive();",
|
||||
"AetheriaRuntimeDaemonFrameDocument RequireManagedFrame()",
|
||||
"RequireManagedFrame()",
|
||||
"RequireManagedCatalog()",
|
||||
"RequireManagedLoadoutTemplates().Templates",
|
||||
"managedStarbridgeScenario?.Current",
|
||||
"managedStarbridgeSession?.Current",
|
||||
"return managedStarbridgeScenario.Current;",
|
||||
"return managedStarbridgeSession.Current;",
|
||||
"BootstrapCatalogDocument(",
|
||||
"CatalogBootstrapSource(",
|
||||
"BootstrapRuntimeCatalog",
|
||||
|
|
@ -12673,12 +12710,7 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
client.Contains("state.ObserveCatalog()", StringComparison.Ordinal) ||
|
||||
client.Contains("state.ObserveLoadoutTemplates()", StringComparison.Ordinal) ||
|
||||
client.Contains("state.Starbridge.ObserveScenario()", StringComparison.Ordinal) ||
|
||||
client.Contains("state.Starbridge.ObserveSession()", StringComparison.Ordinal) ||
|
||||
client.Contains("catalogDocument.Reactive()", StringComparison.Ordinal) ||
|
||||
client.Contains("loadoutTemplatesDocument.Reactive()", StringComparison.Ordinal) ||
|
||||
client.Contains("starbridgeScenarioDocument.Reactive()", StringComparison.Ordinal) ||
|
||||
client.Contains("starbridgeSessionDocument.Reactive()", StringComparison.Ordinal) ||
|
||||
client.Contains("latestFrameDocument.Reactive()", StringComparison.Ordinal))
|
||||
client.Contains("state.Starbridge.ObserveSession()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Aetheria Verse client derived documents must sample directly owned named reactive typed documents instead of an input/session wrapper.");
|
||||
|
|
@ -12735,14 +12767,13 @@ static void RequireAetheriaRuntimeVerseClientContract(string root)
|
|||
"CultMeshReactiveDocument<AetheriaRuntimeDaemonHealthDocument>? _eveStateRefHealth",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeDaemonCommandBoundaryDocument>? _eveStateRefCommandBoundary",
|
||||
"CultMeshReactiveDocument<AetheriaRuntimeCatalogSnapshot>? _eveStateRefCatalog",
|
||||
"_eveStateRefFrame ??= DaemonFrame.Reactive()",
|
||||
"_eveStateRefHealth ??= Health.Reactive()",
|
||||
"_eveStateRefCommandBoundary ??= CommandBoundary.Reactive()",
|
||||
"_eveStateRefCatalog ??= Catalog.Reactive()",
|
||||
"() => _eveStateRefFrame.Current",
|
||||
"() => _eveStateRefHealth.Current",
|
||||
"() => _eveStateRefCommandBoundary.Current",
|
||||
"() => _eveStateRefCatalog.Current",
|
||||
"() => ReadOptionalReactive(ref _eveStateRefFrame, DaemonFrame)",
|
||||
"() => ReadOptionalReactive(ref _eveStateRefHealth, Health)",
|
||||
"() => ReadOptionalReactive(ref _eveStateRefCommandBoundary, CommandBoundary)",
|
||||
"() => ReadOptionalReactive(ref _eveStateRefCatalog, Catalog)",
|
||||
"private static TDocument? ReadOptionalReactive<TDocument>(",
|
||||
"reactive ??= handle.Reactive()",
|
||||
"return reactive.Current",
|
||||
"public void Dispose()",
|
||||
"_eveStateRefFrame?.Dispose()",
|
||||
"_eveStateRefHealth?.Dispose()",
|
||||
|
|
@ -13500,41 +13531,41 @@ static void RequireMainMenuVerseHostDocumentAccess(string root)
|
|||
|
||||
var requiredMainMenuSymbols = new[]
|
||||
{
|
||||
"ResolveVerseHostSettings(AetheriaRuntimeStateBootReport stateBoot)",
|
||||
"AetheriaUnityRuntimeClientProvider",
|
||||
".RuntimeState(stateBoot, \"unity-main-menu\")",
|
||||
".VerseHostSettings",
|
||||
".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)",
|
||||
".Latest()",
|
||||
"AetheriaRuntimeClientTargetSurfaceBuilder.Build(",
|
||||
"AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot("
|
||||
"ResolveMainMenuSurface("
|
||||
};
|
||||
var requiredBuilderSymbols = new[]
|
||||
{
|
||||
"\"Client Target\"",
|
||||
"\"Transport\"",
|
||||
"\"Target Source\"",
|
||||
"\"Verse\"",
|
||||
"\"Visibility\"",
|
||||
"\"CultMesh\"",
|
||||
"The client target chooses which Verse it follows; game truth belongs to the daemon serving"
|
||||
"public static AetheriaRuntimeSurfaceDocument BuildRoot(",
|
||||
"AetheriaRuntimeStateBootReport stateBoot",
|
||||
"AetheriaRuntimeVerseHostSettingsDocument verseHost",
|
||||
"verseHost?.Title ?? stateBoot.Title",
|
||||
"verseHost?.VerseId ?? stateBoot.VerseId",
|
||||
"verseHost?.Visibility ?? \"unknown\"",
|
||||
"verseHost?.CultMeshAddress ?? stateBoot.CultMeshAddress",
|
||||
".TitleSubtitle(\"AETHERIA\", \"TERMINUS\")",
|
||||
".Metric(\"Verse\", verseLabel)",
|
||||
".Metric(\"Target\", targetLine)",
|
||||
".Metric(\"Daemon\", daemonLine)",
|
||||
".Metric(\"Transport\", transportLine)",
|
||||
"private static string VerseLabel(",
|
||||
"private static string TargetLine(",
|
||||
"\"No daemon frame\"",
|
||||
"\"Run {daemonRunId} / frame {daemonFrameId}\""
|
||||
};
|
||||
var requiredClientTargetBuilderSymbols = new[]
|
||||
{
|
||||
"Build(",
|
||||
"AetheriaRuntimeStateBootReport stateBoot",
|
||||
"AetheriaRuntimeVerseHostSettingsDocument verseHost",
|
||||
"stateBoot.FailureMessage",
|
||||
"stateBoot.DiscoveryEndpoints",
|
||||
"stateBoot.DiscoveredVerses",
|
||||
"stateBoot.LastDiscoveryAtUtc",
|
||||
"stateBoot.LastDiscoveryError",
|
||||
"stateBoot.ReplicaStateFilePath",
|
||||
"stateBoot.LastReplicaSyncAtUtc",
|
||||
"stateBoot.LastReplicaSyncError",
|
||||
"var hostTitle = verseHost?.Title ?? targetTitle",
|
||||
"var hostVerseId = verseHost?.VerseId ?? targetVerseId",
|
||||
"var hostVisibility = verseHost?.Visibility ?? \"unknown\"",
|
||||
"var hostCultMeshAddress = verseHost?.CultMeshAddress ?? targetCultMeshAddress"
|
||||
"\"Transport\"",
|
||||
"\"Target Source\"",
|
||||
"\"Verse\"",
|
||||
"\"Visibility\"",
|
||||
"\"CultMesh\"",
|
||||
"Client target edits are local. Visibility changes append provider-owned Eve requests"
|
||||
};
|
||||
var missingMainMenuSymbols = requiredMainMenuSymbols
|
||||
.Where(symbol => !mainMenu.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -13570,13 +13601,15 @@ static void RequireMainMenuVerseHostDocumentAccess(string root)
|
|||
string.Join(", ", missingClientTargetBuilderSymbols));
|
||||
}
|
||||
|
||||
if (mainMenu.Contains("AetheriaRuntimeMainMenuSurfaceBuilder.ProjectVerseSettings(", StringComparison.Ordinal) ||
|
||||
if (mainMenu.Contains("AetheriaRuntimeMainMenuSurfaceBuilder.BuildRoot(", StringComparison.Ordinal) ||
|
||||
mainMenu.Contains("AetheriaRuntimeClientTargetSurfaceBuilder.Build(", StringComparison.Ordinal) ||
|
||||
mainMenu.Contains("AetheriaRuntimeMainMenuSurfaceBuilder.ProjectVerseSettings(", StringComparison.Ordinal) ||
|
||||
mainMenuSurfaceBuilder.Contains("ProjectVerseSettings(", StringComparison.Ordinal) ||
|
||||
mainMenu.Contains("new AetheriaRuntimeClientTargetSurfaceState(", StringComparison.Ordinal) ||
|
||||
mainMenuSurfaceBuilder.Contains("new AetheriaRuntimeClientTargetSurfaceState(", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Main-menu Verse state must come from typed documents through AetheriaRuntimeClientTargetSurfaceBuilder; do not reintroduce menu-local client-target state shaping.");
|
||||
"Unity MainMenu must consume daemon-published main-menu surfaces instead of reintroducing menu-local client-target state shaping.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -16682,16 +16715,18 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
var requiredSurfaceDocumentSymbols = new[]
|
||||
{
|
||||
"public static class AetheriaRuntimeSurfaceDocuments",
|
||||
"public static EveSurfaceDocument ToEveSurfaceDocument(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveSurfaceDocument ResolveStateRefs(",
|
||||
"public static GameCult.Mesh.EveSurfaceDocument ToPortableSurface(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToEveSurfaceDocument(AetheriaRuntimeSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ToEveSurfaceDocument(GameCult.Mesh.EveSurfaceDocument document)",
|
||||
"public static EveUiSurfaceDocument ResolveStateRefs(",
|
||||
"CultMeshStateRefResolver? stateRefResolver",
|
||||
"ResolvePropRefs(props, resolveStateRef)",
|
||||
"ResolvePropRef(props, AetheriaRuntimeSurfaceStateRefs.Source, \"value\", resolveStateRef)",
|
||||
"IsStatePointerProp(prop.Key)",
|
||||
"ResolvePointerValueKey(refProp.Key)",
|
||||
"public static EveSurfaceDocument EmptySurface(string surfaceId)",
|
||||
"new EveSurfaceDocument(",
|
||||
"new EveSurfaceComponent("
|
||||
"public static EveUiSurfaceDocument EmptySurface(string surfaceId)",
|
||||
"new EveUiSurfaceDocument(",
|
||||
"new EveUiSurfaceComponent("
|
||||
};
|
||||
var missingSurfaceDocumentSymbols = requiredSurfaceDocumentSymbols
|
||||
.Where(symbol => !runtimeSurfaceDocuments.Contains(symbol, StringComparison.Ordinal))
|
||||
|
|
@ -16977,7 +17012,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
|
||||
var missingProviderClientAccess = providerOwnedClientAccessSources
|
||||
.Where(pair =>
|
||||
!pair.Value.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal))
|
||||
!pair.Value.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal) &&
|
||||
!pair.Value.Contains("AetheriaEveRuntimeUnityHooks", StringComparison.Ordinal))
|
||||
.Select(pair => pair.Key)
|
||||
.ToArray();
|
||||
if (missingProviderClientAccess.Length > 0)
|
||||
|
|
@ -17023,10 +17059,11 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"public CultMeshDocumentHandle<AetheriaRuntimeVerseAuthorityPolicyDocument> AuthorityPolicy { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeDaemonFrameDocument> DaemonFrame { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeDaemonSoaViewDocument> DaemonSoaView { get; }",
|
||||
"public CultMeshDocumentHandle<global::Aetheria.State.Documents.EveSurfaceState> GameSurface { get; }",
|
||||
"public CultMeshDocumentHandle<global::Aetheria.State.Documents.EveSurfaceState> GameTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<global::Aetheria.State.Documents.EveSurfaceState> EditorSurface { get; }",
|
||||
"public CultMeshDocumentHandle<global::Aetheria.State.Documents.EveSurfaceState> EditorTuiSurface { get; }",
|
||||
"using MeshEveSurfaceDocument = GameCult.Mesh.EveSurfaceDocument;",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> GameTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorSurface { get; }",
|
||||
"public CultMeshDocumentHandle<MeshEveSurfaceDocument> EditorTuiSurface { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeCatalogSnapshot> Catalog { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeLoadoutTemplatesDocument> LoadoutTemplates { get; }",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimePlayerSettingsDocument> PlayerSettings { get; }",
|
||||
|
|
@ -17420,11 +17457,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
}
|
||||
|
||||
if (!mainMenu.Contains("AetheriaUnityRuntimeClientProvider", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains("ResolveSectorMap(AetheriaRuntimeStateBootReport stateBoot)", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains("ResolveMainMenuSurface(string surfaceId)", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".RuntimeState(stateBoot, \"unity-main-menu\")", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".SectorMap", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".PlayerSettings", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".VerseHostSettings", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".MainMenuSurface(surfaceId, CanOpenRuntimeInputScreen(), InGame)", StringComparison.Ordinal) ||
|
||||
!mainMenu.Contains(".Latest()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
|
|
@ -17513,7 +17548,7 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
string.Join(", ", mainMenuReaderHits));
|
||||
}
|
||||
|
||||
if (!eveSurfacePresenter.Contains(".RuntimeState(stateBoot, \"unity-eve-surface-presenter\")", StringComparison.Ordinal) ||
|
||||
if (!eveSurfacePresenter.Contains(".RequireRuntimeState(stateBoot, \"unity-eve-surface-presenter\")", StringComparison.Ordinal) ||
|
||||
!eveSurfacePresenter.Contains(".EveSurfaceDocument(surfaceId)", StringComparison.Ordinal) ||
|
||||
!eveSurfacePresenter.Contains("?.Reactive()", StringComparison.Ordinal) ||
|
||||
!eveSurfacePresenter.Contains("ReadDaemonSurface(stateBoot)", StringComparison.Ordinal))
|
||||
|
|
@ -17522,8 +17557,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root)
|
|||
"Aetheria Eve surface presenter must grab the provider RuntimeState and read the daemon surface through AetheriaClientState reactive typed documents.");
|
||||
}
|
||||
|
||||
if (!eveSurfacePresenter.Contains("AetheriaUnityRuntimeClientProvider.EveSurfaceCultMeshStateRefResolver(", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("AetheriaUnityRuntimeClientProvider.EveSurfaceCultMeshStateRefResolver(", StringComparison.Ordinal))
|
||||
if (!eveSurfacePresenter.Contains("AetheriaEveRuntimeUnityHooks.TryCreateStateRefResolver(", StringComparison.Ordinal) ||
|
||||
!eveUnitySurfaceHost.Contains("AetheriaEveRuntimeUnityHooks.TryCreateDefaultStateRefResolver()", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Unity Eve surface lowering must resolve provider state refs through provider-native managed AetheriaClientState documents.");
|
||||
|
|
|
|||
Loading…
Reference in a new issue