Neutralize Aetheria surface catalog ids

This commit is contained in:
Meta Vens 2026-07-05 22:14:58 +01:00
commit fbdf4626f6
6 changed files with 18 additions and 10 deletions

View file

@ -476,7 +476,7 @@ export class AetheriaCultMeshClient {
private createViewportFeed() {
return CultMesh.liveFeed<AetheriaRuntimeViewportFeedRequest, AetheriaRuntimeViewportFeedSnapshot>(
"gamecult.aetheria.rts.viewport_feed.v1",
"gamecult.aetheria.viewport_feed.v1",
async (request, context) => {
const objects = await this.queries.objectsViewport.execute(request.viewport, context);
return this.createViewportFeedSnapshot(request, objects);

View file

@ -2318,7 +2318,7 @@ export function describeAetheriaRuntimeRtsSurfaceCatalog(
documents: AetheriaRuntimeGameDocuments = createAetheriaRuntimeGameDocuments(),
): AetheriaRuntimeRtsSurfaceCatalogDiagnostic {
return CultMesh.describeSurfaceCatalog(
"gamecult.aetheria.rts.surfaces.v1",
"gamecult.aetheria.surfaces.v1",
[
CultMesh.describeSurface(documents.daemonFrame),
CultMesh.describeSurface(documents.daemonHealth),

View file

@ -255,7 +255,7 @@ function isElectronSmokeReady(result: Record<string, unknown>): boolean {
arrayValue(eveFieldSurface?.embeddedDocuments).some(slot =>
objectValue(slot)?.slotId === "objects") &&
stringValue(actor?.entityKey).length > 0 &&
surfaceCatalog?.catalogId === "gamecult.aetheria.rts.surfaces.v1" &&
surfaceCatalog?.catalogId === "gamecult.aetheria.surfaces.v1" &&
arrayValue(surfaceCatalogIndex?.queries).length > 0 &&
arrayValue(surfaceCatalogIndex?.operations).some(surface =>
objectValue(surface)?.surfaceId === "gamecult.aetheria.pilot.set_move_vector.v1") &&

View file

@ -834,7 +834,7 @@ export function describeAetheriaRuntimeRtsSurfaceCatalog(
documents: AetheriaRuntimeGameDocuments = createAetheriaRuntimeGameDocuments(),
): AetheriaRuntimeRtsSurfaceCatalogDiagnostic {
return CultMesh.describeSurfaceCatalog(
"gamecult.aetheria.rts.surfaces.v1",
"gamecult.aetheria.surfaces.v1",
[
CultMesh.describeSurface(documents.daemonFrame),
CultMesh.describeSurface(documents.daemonHealth),

View file

@ -36,6 +36,14 @@ if ($LASTEXITCODE -gt 1) {
Write-Error "Stage 7B verifier could not run rg for file-backed debug surface checks."
}
$forbiddenRtsSurfaceContractHits = & rg -n 'gamecult\.aetheria\.rts\.(surfaces|viewport_feed)' Client Electron scripts/generate-rts-bindings.mjs 2>$null
if ($LASTEXITCODE -eq 0) {
Write-Error "Stage 7B verifier failed: Aetheria CultMesh surface catalog/feed ids must not be RTS-branded.`n$forbiddenRtsSurfaceContractHits"
}
if ($LASTEXITCODE -gt 1) {
Write-Error "Stage 7B verifier could not run rg for RTS-branded surface contract checks."
}
$required = @(
'mapViewport',
'objectsViewport',

View file

@ -108,10 +108,10 @@ if (!Array.isArray(starbridge.waveForecast) || !starbridge.waveForecast.some(wav
throw new Error("Starbridge session did not expose daemon-seeded wave forecast.");
const surfaceCatalog = client.surfaceCatalogDiagnostics();
if (surfaceCatalog.catalogId !== "gamecult.aetheria.rts.surfaces.v1")
throw new Error(`Unexpected RTS surface catalog id: ${surfaceCatalog.catalogId}`);
if (!surfaceCatalog.surfaces.some(surface => surface.surfaceId === "gamecult.aetheria.rts.viewport_feed.v1" && surface.kind === "live-feed"))
throw new Error("RTS surface catalog did not expose the viewport live feed.");
if (surfaceCatalog.catalogId !== "gamecult.aetheria.surfaces.v1")
throw new Error(`Unexpected Aetheria surface catalog id: ${surfaceCatalog.catalogId}`);
if (!surfaceCatalog.surfaces.some(surface => surface.surfaceId === "gamecult.aetheria.viewport_feed.v1" && surface.kind === "live-feed"))
throw new Error("Aetheria surface catalog did not expose the viewport live feed.");
if (!surfaceCatalog.surfaces.some(surface => surface.surfaceId === "gamecult.aetheria.pilot.set_move_vector.v1" && surface.kind === "operation"))
throw new Error("RTS surface catalog did not expose the move operation.");
if (!surfaceCatalog.surfaces.some(surface =>
@ -126,8 +126,8 @@ if (surfaceIndex.catalogId !== surfaceCatalog.catalogId)
throw new Error("RTS surface catalog index did not preserve the catalog id.");
if (!Array.isArray(surfaceIndex.operations) || surfaceIndex.operations.length < 2)
throw new Error("RTS surface catalog index did not group operation surfaces.");
if (!Array.isArray(surfaceIndex.liveFeeds) || !surfaceIndex.liveFeeds.some(surface => surface.surfaceId === "gamecult.aetheria.rts.viewport_feed.v1"))
throw new Error("RTS surface catalog index did not group the viewport live feed.");
if (!Array.isArray(surfaceIndex.liveFeeds) || !surfaceIndex.liveFeeds.some(surface => surface.surfaceId === "gamecult.aetheria.viewport_feed.v1"))
throw new Error("Aetheria surface catalog index did not group the viewport live feed.");
if (!Array.isArray(surfaceIndex.queries) || !surfaceIndex.queries.some(surface => surface.surfaceId === "gamecult.aetheria.objects_viewport.v1"))
throw new Error("RTS surface catalog index did not group generated query surfaces.");
if (!Array.isArray(surfaceIndex.documents) || !surfaceIndex.documents.some(surface => surface.surfaceId === "daemon:aetheria.frame.latest.v1"))