From f6c44d9d65dcffdea6a303018a85c856f8832609 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 9 Jul 2026 22:53:19 +0100 Subject: [PATCH] Track EveUnity generic host proof --- docs/eve-migration-roadmap.md | 25 +++++++++++++------ scripts/run-aetheria-unity-editmode-tests.ps1 | 6 ++++- scripts/run-aetheria-unity-package-smoke.ps1 | 24 ++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/docs/eve-migration-roadmap.md b/docs/eve-migration-roadmap.md index b0c1285..efc0a6d 100644 --- a/docs/eve-migration-roadmap.md +++ b/docs/eve-migration-roadmap.md @@ -686,9 +686,14 @@ Recently cut: at `AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest`. EveUnity still consumes only the generic provider/plugin contracts and sidecar transport ports; Aetheria keeps the gameplay and asset authority. The remaining blocker - is rendered-frame proof from the future EveUnity owner repo, with provider - receipts plus daemon snapshots driving Unity frames rather than - renderer-local simulation. + has narrowed again: Aetheria now mounts + `AetheriaEveUnitySceneProviderComponent` through the generic + `EveUnityPlayableWorldClientHost`, instantiates provider-authored daemon + entities under a real Unity `GameObject` scene root, and drives the generic + camera rig from the advertised player entity without Aetheria-specific Unity + client code. The remaining blocker is owner-repo PNG/frame capture from the + future EveUnity repo, with provider receipts plus daemon snapshots driving + frames rather than renderer-local simulation. - EveElectron capture lifecycle now carries the same kind of structured pending capture contract. `captureContract` names the Electron shell runtime, capture kind, PNG artifact pattern, conformance attachment point, required Aetheria @@ -1016,12 +1021,18 @@ Recently cut: `AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest` record, submits movement through the advertised `gamecult.eve.command.v1` boundary, observes provider-owned receipts, and refreshes from daemon snapshots without - importing Aetheria product authority into EveUnity. Eve records this as the - `aetheria-playable-world-consumer-proof` observed-provider move set in + importing Aetheria product authority into EveUnity. Aetheria also proves the + generic Unity scene body, not only a recording sink: + `GenericEveUnityClientHostInstantiatesAetheriaDaemonWorldThroughProviderComponent` + mounts the public provider component through `EveUnityPlayableWorldClientHost`, + creates provider-authored `EveUnityPlayableWorldEntityMarker` GameObjects, and + applies `EveUnityPlayableWorldCameraRig` against the advertised player. + Eve records this as the `aetheria-playable-world-consumer-proof` + observed-provider move set in `runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json`, and the split-target plus Aetheria consumer smokes assert it from the conformance - export. The remaining blocker is live transport/rendered-frame proof from - the future EveUnity owner repo, not whether the Unity client is generic. + export. The remaining blocker is owner-repo PNG/frame capture from the future + EveUnity repo, not whether the Unity client is generic. - Aetheria now has repeatable Unity package consumer-build evidence for the Eve UI Toolkit runtime. `scripts/run-aetheria-unity-package-smoke.ps1` verifies Aetheria's Unity `Packages/manifest.json` consumes Eve's surface, diff --git a/scripts/run-aetheria-unity-editmode-tests.ps1 b/scripts/run-aetheria-unity-editmode-tests.ps1 index b0522fe..f0b6e14 100644 --- a/scripts/run-aetheria-unity-editmode-tests.ps1 +++ b/scripts/run-aetheria-unity-editmode-tests.ps1 @@ -3,7 +3,8 @@ param( [string] $UnityExe = "C:\Program Files\Unity\Hub\Editor\6000.4.2f1\Editor\Unity.exe", [string] $OutputRoot = "", [string] $PackageName = "org.gamecult.eve.unity-uitoolkit", - [string] $TestAssembly = "GameCult.Eve.UnityUIToolkit.Tests" + [string] $TestAssembly = "GameCult.Eve.UnityUIToolkit.Tests", + [string] $TestFilter = "" ) $ErrorActionPreference = "Stop" @@ -73,6 +74,9 @@ try { "-testResults", $resultsPath, "-logFile", $logPath ) + if (-not [string]::IsNullOrWhiteSpace($TestFilter)) { + $arguments += @("-testFilter", $TestFilter) + } $process = Start-Process -FilePath $UnityExe -ArgumentList $arguments -Wait -PassThru -WindowStyle Hidden $exitCode = $process.ExitCode diff --git a/scripts/run-aetheria-unity-package-smoke.ps1 b/scripts/run-aetheria-unity-package-smoke.ps1 index 60c95b2..76c70f6 100644 --- a/scripts/run-aetheria-unity-package-smoke.ps1 +++ b/scripts/run-aetheria-unity-package-smoke.ps1 @@ -17,6 +17,7 @@ $aetheriaEveRuntimePackage = Join-Path $AetheriaRoot "Packages\org.gamecult.aeth $aetheriaEveRuntimeAsmdef = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\GameCult.Aetheria.EveRuntime.asmdef" $aetheriaSceneBridge = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\AetheriaEveUnitySceneProviderBridge.cs" $aetheriaSceneProviderComponent = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\AetheriaEveUnitySceneProviderComponent.cs" +$aetheriaDaemonRuntimeTests = Join-Path $AetheriaRoot "Assets\Scripts\Tests\DaemonRuntimeDocumentTests.cs" $aetheriaClientState = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaClientState.cs" $aetheriaSurfaceCatalog = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeEveSurfaceCatalog.cs" $aetheriaGameSurfaceBuilder = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonGameSurfaceBuilder.cs" @@ -47,6 +48,9 @@ if (-not (Test-Path $aetheriaSceneBridge)) { if (-not (Test-Path $aetheriaSceneProviderComponent)) { throw "Aetheria Eve Unity scene provider component not found: $aetheriaSceneProviderComponent" } +if (-not (Test-Path $aetheriaDaemonRuntimeTests)) { + throw "Aetheria daemon runtime tests not found: $aetheriaDaemonRuntimeTests" +} if (-not (Test-Path $aetheriaClientState)) { throw "Aetheria client state not found: $aetheriaClientState" } @@ -181,6 +185,8 @@ foreach ($symbol in @( "stateFilePathOverride", "surfaceId", "runtimeId", + "public void Configure(", + "Dispose();", "Refresh", "Submit", "SubmitCommand" @@ -190,6 +196,24 @@ foreach ($symbol in @( } } +$daemonRuntimeTests = Get-Content -Raw -LiteralPath $aetheriaDaemonRuntimeTests +foreach ($symbol in @( + "GenericEveUnityClientHostInstantiatesAetheriaDaemonWorldThroughProviderComponent", + "AetheriaEveUnitySceneProviderComponent", + "provider.Configure(", + "EveUnityPlayableWorldClientHost", + "host.Configure(", + "rootObject.GetComponentsInChildren()", + "EveUnityPlayableWorldCameraRig", + "cameraRig.ApplyRig(0f)", + "TestGameObjectAssetProvider", + "IEveUnityGameObjectAssetProvider" +)) { + if (-not $daemonRuntimeTests.Contains($symbol)) { + throw "Aetheria daemon runtime tests missing generic EveUnity GameObject host proof symbol: $symbol" + } +} + $surfaceCatalog = Get-Content -Raw -LiteralPath $aetheriaSurfaceCatalog foreach ($symbol in @( "AetheriaRuntimeEveWorldInteractionAdvertisement",