From fbdf4626f6002cc8ee655a97e864a714fb3f97ed Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 5 Jul 2026 22:14:58 +0100 Subject: [PATCH] Neutralize Aetheria surface catalog ids --- Aetheria.Rts.Web/Electron/aetheria-cultmesh.ts | 2 +- .../Electron/aetheria-rts-generated-bindings.ts | 2 +- Aetheria.Rts.Web/Electron/main.ts | 2 +- Aetheria.Rts.Web/scripts/generate-rts-bindings.mjs | 2 +- .../scripts/verify-stage7b-rts-client.ps1 | 8 ++++++++ .../scripts/verify-stage7c-local-runtime.ps1 | 12 ++++++------ 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Aetheria.Rts.Web/Electron/aetheria-cultmesh.ts b/Aetheria.Rts.Web/Electron/aetheria-cultmesh.ts index dd8dd78f1..86ec6f2a9 100644 --- a/Aetheria.Rts.Web/Electron/aetheria-cultmesh.ts +++ b/Aetheria.Rts.Web/Electron/aetheria-cultmesh.ts @@ -476,7 +476,7 @@ export class AetheriaCultMeshClient { private createViewportFeed() { return CultMesh.liveFeed( - "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); diff --git a/Aetheria.Rts.Web/Electron/aetheria-rts-generated-bindings.ts b/Aetheria.Rts.Web/Electron/aetheria-rts-generated-bindings.ts index e26263154..34ad33528 100644 --- a/Aetheria.Rts.Web/Electron/aetheria-rts-generated-bindings.ts +++ b/Aetheria.Rts.Web/Electron/aetheria-rts-generated-bindings.ts @@ -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), diff --git a/Aetheria.Rts.Web/Electron/main.ts b/Aetheria.Rts.Web/Electron/main.ts index b9b9cfc5e..a31ee658c 100644 --- a/Aetheria.Rts.Web/Electron/main.ts +++ b/Aetheria.Rts.Web/Electron/main.ts @@ -255,7 +255,7 @@ function isElectronSmokeReady(result: Record): 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") && diff --git a/Aetheria.Rts.Web/scripts/generate-rts-bindings.mjs b/Aetheria.Rts.Web/scripts/generate-rts-bindings.mjs index 63fa8ea52..7aa5969cd 100644 --- a/Aetheria.Rts.Web/scripts/generate-rts-bindings.mjs +++ b/Aetheria.Rts.Web/scripts/generate-rts-bindings.mjs @@ -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), diff --git a/Aetheria.Rts.Web/scripts/verify-stage7b-rts-client.ps1 b/Aetheria.Rts.Web/scripts/verify-stage7b-rts-client.ps1 index cd2e2b236..2b2b4dc3c 100644 --- a/Aetheria.Rts.Web/scripts/verify-stage7b-rts-client.ps1 +++ b/Aetheria.Rts.Web/scripts/verify-stage7b-rts-client.ps1 @@ -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', diff --git a/Aetheria.Rts.Web/scripts/verify-stage7c-local-runtime.ps1 b/Aetheria.Rts.Web/scripts/verify-stage7c-local-runtime.ps1 index 07554d47c..bd10bb32f 100644 --- a/Aetheria.Rts.Web/scripts/verify-stage7c-local-runtime.ps1 +++ b/Aetheria.Rts.Web/scripts/verify-stage7c-local-runtime.ps1 @@ -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"))