Neutralize Electron local run fallback

This commit is contained in:
Meta Vens 2026-07-05 21:54:50 +01:00
commit 0aafef3b22
3 changed files with 18 additions and 10 deletions

View file

@ -44,6 +44,8 @@ import type {
ViewportResponse,
} from "./aetheria-rts-bindings.js";
const missingDaemonRunId = "aetheria.run.unknown";
export function buildViewportDocumentFromFrame(frameDocument: unknown, request: ViewportRequest): ViewportResponse {
const objects = buildObjectsViewportDocumentFromFrame(frameDocument, request);
const gravity = buildGravityViewportDocumentFromFrame(frameDocument, request);
@ -75,7 +77,7 @@ export function buildObjectsViewportDocumentFromFrame(
const zone = zones.find(candidate => num(candidate[zoneSlots.zoneIndex], -1) === currentZoneIndex) ??
zones[0] ??
[];
const runId = str(run[runSlots.runId]) || "local-rts";
const runId = str(run[runSlots.runId]) || missingDaemonRunId;
const viewport = normalizeViewport(request);
const entities = list<unknown[]>(zone[zoneSlots.entities]);
const controlledEntityIndices = entities
@ -121,7 +123,7 @@ export function buildGravityViewportDocumentFromFrame(
const zone = zones.find(candidate => num(candidate[zoneSlots.zoneIndex], -1) === currentZoneIndex) ??
zones[0] ??
[];
const runId = str(run[runSlots.runId]) || "local-rts";
const runId = str(run[runSlots.runId]) || missingDaemonRunId;
const viewport = normalizeViewport(request);
const visibleBodies = list<unknown[]>(zone[zoneSlots.bodies])
.filter(body => gravityInfluenceIntersectsViewport(body, viewport));
@ -151,7 +153,7 @@ export function buildRenderSplatsViewportDocumentFromFrame(
const zone = zones.find(candidate => num(candidate[zoneSlots.zoneIndex], -1) === currentZoneIndex) ??
zones[0] ??
[];
const runId = str(run[runSlots.runId]) || "local-rts";
const runId = str(run[runSlots.runId]) || missingDaemonRunId;
const viewport = normalizeViewport(request);
const layers = defaultRenderSplatLayers();
const layerIndices: ReadonlyMap<string, number> = new Map(layers.map((layer, index) => [layer.layerKey, index] as const));
@ -459,7 +461,7 @@ function frameContext(frameDocument: unknown): {
[];
return {
frameId: num(frame[frameSlots.frameId]),
runId: str(run[runSlots.runId]) || "local-rts",
runId: str(run[runSlots.runId]) || missingDaemonRunId,
zoneIndex: num(zone[zoneSlots.zoneIndex]),
entities: list<unknown[]>(zone[zoneSlots.entities]),
};

View file

@ -139,7 +139,7 @@ $requiredGeneratedBindingSymbols = @(
'AetheriaRuntimeRtsQueryDiagnostic',
'AetheriaRuntimeRtsLiveFeedDiagnostic',
'AetheriaRuntimeRtsSurfaceCatalogDiagnostic',
'AetheriaRuntimeRtsDocuments',
'AetheriaRuntimeGameDocuments',
'AetheriaRuntimeRtsDocumentResolvers',
'CultMeshSurfaceCatalogDiagnostic',
'CultMeshSurfaceCatalogIndexDiagnostic',
@ -156,7 +156,7 @@ $requiredGeneratedBindingSymbols = @(
'routeHint: CultMeshRouteHint',
'CultMeshQueryWatcher',
'AetheriaRuntimeRtsQueryWatchers',
'createAetheriaRuntimeRtsDocuments',
'createAetheriaRuntimeGameDocuments',
'CultMesh.document',
'CultMesh.bindDocument',
'CultMesh.describeSurface(documents.daemonFrame)',
@ -219,7 +219,7 @@ if ($LASTEXITCODE -ne 0) {
$clientText = Get-Content Electron/aetheria-cultmesh.ts -Raw
if (-not $clientText.Contains('this.documents = createAetheriaRuntimeRtsDocuments(') -or
if (-not $clientText.Contains('this.documents = createAetheriaRuntimeGameDocuments(') -or
-not $clientText.Contains('this.queryVerse.context.routeHint,')) {
Write-Error "Stage 7B verifier failed: RTS client is not creating generated document handles with its shared Verse route."
}
@ -515,9 +515,10 @@ $requiredGeneratedBindingSymbols = @(
'aetheriaRuntimeDaemonCommandDocumentSlots',
'aetheriaRuntimeDaemonFrameDocumentSlots',
'aetheriaRuntimeDaemonHealthDocumentSlots',
'aetheriaRuntimeRtsViewportDocumentSlots',
'aetheriaRuntimeGameViewportDocumentSlots',
'aetheriaRuntimeObjectsViewportDocumentSlots',
'aetheriaRuntimeGravityViewportDocumentSlots',
'aetheriaRuntimeRenderSplatsViewportDocumentSlots',
'aetheriaRuntimeSelectedObjectDocumentSlots',
'aetheriaRuntimeInventoryDocumentSlots',
'aetheriaRuntimeStarbridgeScenarioDocumentSlots',
@ -528,8 +529,8 @@ $requiredGeneratedBindingSymbols = @(
'aetheriaRuntimeStarbridgeWaveForecastSlots',
'aetheriaRuntimeStarbridgeRuntimeRoleSlots',
'aetheriaRuntimeStarbridgeBaseStatusSlots',
'aetheriaRuntimeRtsViewportBoundsSlots',
'aetheriaRuntimeRtsViewportObjectSlots',
'aetheriaRuntimeGameViewportBoundsSlots',
'aetheriaRuntimeGameViewportObjectSlots',
'aetheriaRuntimeVerseAuthorityPolicyDocumentSlots',
'aetheriaRuntimeAuthorityRuleSlots',
'aetheriaRuntimeAuthorityLeaseDocumentSlots',

View file

@ -16253,6 +16253,11 @@ static void RequireUnityDoesNotCallSharedSimulationTicks(string root)
throw new InvalidOperationException(
"Aetheria daemon smoke/freeze callers and fixtures must use client-neutral endpoint, run, and runtime vocabulary instead of preserving RTS-branded transport names.");
}
if (rtsLocalDocuments.Contains("local-rts", StringComparison.Ordinal))
{
throw new InvalidOperationException(
"Electron local document projections must not invent RTS-branded run ids when the daemon frame omits run identity.");
}
if (stateBoundary.Contains("UnityRuntimeIdOverrideEnvironmentVariable", StringComparison.Ordinal) ||
stateBoundary.Contains("AETHERIA_UNITY_RUNTIME_ID", StringComparison.Ordinal) ||
clientTargetStore.Contains("raven-unity", StringComparison.Ordinal) ||