Add Unity scene provider shell skeleton

This commit is contained in:
Meta Vens 2026-07-09 10:34:04 +01:00
commit 990a5fa32a
16 changed files with 412 additions and 25 deletions

View file

@ -70,9 +70,9 @@ try {
--expect-command-boundary-coverage aetheria:aetheria.daemon.editor:tui:missing-runtime-claim:EveTui:tui `
--expect-world-lowering-gap aetheria:aetheria.daemon.game:unity-scene:EveUnity:unity-scene `
--expect-world-lowering-gap aetheria:aetheria.daemon.editor:tui:EveTui:tui `
--expect-split-target-blocker "EveUnity:Unity scene runtime body exists outside Aetheria product code" `
--expect-split-target-blocker "EveUnity:Unity scene runtime body graduates to EveUnity outside Aetheria product code" `
--expect-split-target-blocker "EveElectron:Electron shell runtime body exists outside Aetheria product code" `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-runtime-body:replacement-required:no-source-paths:none `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-runtime-body:current:exists:EveUnitySceneSurfaceLowerer.cs `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-command-transport:replacement-required:no-source-paths:none `
--expect-split-handoff-move EveElectron:electron-shell:electron-shell-runtime:observed-provider:exists:Aetheria.Rts.Web/Electron `
--expect-split-handoff-move EveElectron:electron-shell:electron-command-transport:observed-provider:exists:Aetheria.Rts.Web/Client/app.ts `

View file

@ -39,8 +39,10 @@ if ($manifest.incubation.splitHandoff.manifestPath -ne "runtimes/incubating/eve-
throw "EveUnity scene manifest missing split handoff path"
}
if (@($manifest.supportedFeatures).Count -ne 0) {
throw "EveUnity scene must not claim supported runtime features before the generic scene lowerer exists"
foreach ($feature in @("providerAdvertisements", "commandTransport")) {
if (-not (@($manifest.supportedFeatures) -contains $feature)) {
throw "EveUnity scene manifest missing provider-shell feature: $feature"
}
}
if (@($manifest.supportedPlugins).Count -ne 0) {
throw "EveUnity scene must not claim plugin projection before the generic scene lowerer exists"
@ -60,7 +62,7 @@ foreach ($pluginId in @("sai.vn", "norn.graph", "tex.math")) {
if ($manifest.commandTransport.schema -ne "gamecult.eve.command.v1") {
throw "Unexpected EveUnity scene command schema: $($manifest.commandTransport.schema)"
}
if ($manifest.commandTransport.status -ne "pending-runtime-body") {
if ($manifest.commandTransport.status -ne "provider-shell-contract-skeleton") {
throw "Unexpected EveUnity scene command transport status: $($manifest.commandTransport.status)"
}
@ -126,5 +128,6 @@ if ($captureContract.runtimeId -ne "unity-scene") {
}
& (Join-Path $projectRoot "scripts\run-eveunity-scene-split-handoff-smoke.ps1")
& (Join-Path $projectRoot "scripts\run-eveunity-scene-provider-shell-smoke.ps1")
Write-Host "EveUnity scene lifecycle smoke passed: $absoluteManifestPath"

View file

@ -20,8 +20,48 @@ $manifest = Get-Content -LiteralPath $absoluteManifestPath -Raw | ConvertFrom-Js
if ($manifest.runtimeId -ne "unity-scene") {
throw "Unexpected EveUnity scene runtime id: $($manifest.runtimeId)"
}
if ($manifest.lifecycle.test.status -ne "pending-provider-advertisement-scene-smoke") {
throw "EveUnity scene provider shell smoke should remain pending until a generic scene body exists: $($manifest.lifecycle.test.status)"
if ($manifest.lifecycle.test.status -ne "provider-shell-contract-skeleton") {
throw "Unexpected EveUnity scene provider shell status: $($manifest.lifecycle.test.status)"
}
throw "EveUnity scene provider shell smoke is a pending contract, not a runnable proof, until EveUnity owns the provider-agnostic Unity scene lowerer."
$worldSurfaceLoweringClaims = if ($null -eq $manifest.worldSurfaceLowering) { @() } else { @($manifest.worldSurfaceLowering) }
if ($worldSurfaceLoweringClaims.Count -ne 0) {
throw "EveUnity scene must not claim provider world-surface lowering until real scene projection and capture evidence exist"
}
foreach ($feature in @("providerAdvertisements", "commandTransport")) {
if (-not (@($manifest.supportedFeatures) -contains $feature)) {
throw "EveUnity scene provider shell missing supported feature: $feature"
}
}
$expectedFiles = @(
"runtimes\incubating\eve-unity-scene\package.json",
"runtimes\incubating\eve-unity-scene\Runtime\GameCult.Eve.UnityScene.asmdef",
"runtimes\incubating\eve-unity-scene\Runtime\EveUnitySceneSurfaceLowerer.cs",
"runtimes\incubating\eve-unity-scene\Tests\Editor\GameCult.Eve.UnityScene.Tests.asmdef",
"runtimes\incubating\eve-unity-scene\Tests\Editor\EveUnitySceneSurfaceLowererTests.cs"
)
foreach ($relativePath in $expectedFiles) {
$absolutePath = Join-Path $projectRoot $relativePath
if (-not (Test-Path -LiteralPath $absolutePath)) {
throw "EveUnity scene provider shell missing file: $relativePath"
}
}
$lowererSource = Get-Content -LiteralPath (Join-Path $projectRoot "runtimes\incubating\eve-unity-scene\Runtime\EveUnitySceneSurfaceLowerer.cs") -Raw
foreach ($symbol in @("EveUnitySceneSurfaceLowerer", "EveUnitySceneProviderSurfaceAdvertisement", "WorldInteraction", "CommandBoundary", "ReceiptSchema", "EveSurfaceCommandRequest", "unity-scene")) {
if (-not $lowererSource.Contains($symbol)) {
throw "EveUnity scene provider shell lowerer missing symbol: $symbol"
}
}
$testSource = Get-Content -LiteralPath (Join-Path $projectRoot "runtimes\incubating\eve-unity-scene\Tests\Editor\EveUnitySceneSurfaceLowererTests.cs") -Raw
foreach ($symbol in @("LowerCarriesProviderAdvertisedWorldBoundary", "CommandIntentCarriesAdvertisedBoundaryWithoutOwningReceipts", "aetheria.daemon.commands", "aetheria.eve_command_acceptance_status.v1")) {
if (-not $testSource.Contains($symbol)) {
throw "EveUnity scene provider shell tests missing symbol: $symbol"
}
}
Write-Host "EveUnity scene provider shell smoke passed: $absoluteManifestPath"

View file

@ -65,8 +65,18 @@ foreach ($id in $expectedMoveSets.Keys) {
}
$currentPaths = if ($null -eq $moveSet.currentPaths) { @() } else { @($moveSet.currentPaths) }
$observedProviderPaths = if ($null -eq $moveSet.observedProviderPaths) { @() } else { @($moveSet.observedProviderPaths) }
if ($currentPaths.Count -ne 0) {
throw "EveUnity scene split handoff move set $id must not claim existing Eve source paths before the generic scene lowerer exists"
if ($id -eq "unity-scene-runtime-body") {
if ($currentPaths.Count -eq 0) {
throw "EveUnity scene split handoff runtime body must name the provider-shell skeleton paths"
}
foreach ($relativePath in $currentPaths) {
$absolutePath = Join-Path $projectRoot $relativePath
if (-not (Test-Path -LiteralPath $absolutePath)) {
throw "EveUnity scene split handoff runtime body path missing: $relativePath"
}
}
} elseif ($currentPaths.Count -ne 0) {
throw "EveUnity scene split handoff move set $id must not claim existing Eve source paths before its proof exists"
}
if ($observedProviderPaths.Count -ne 0) {
throw "EveUnity scene split handoff move set $id must not treat provider product paths as generic scene runtime source"

View file

@ -53,6 +53,8 @@ node $consumerScript $consumerExport `
--expect-runtime-feature web:providerAdvertisements `
--expect-runtime-feature windows-flutter:embeddedDocuments `
--expect-runtime-feature unity-uitoolkit:embeddedDocuments `
--expect-runtime-feature unity-scene:providerAdvertisements `
--expect-runtime-feature unity-scene:commandTransport `
--expect-runtime-feature direct2d:embeddedDocuments `
--expect-runtime-world-target web:web-reference `
--expect-runtime-world-field web:web-reference:supportLevel:reference-dom-canvas-command-boundary `
@ -114,7 +116,7 @@ node $consumerScript $consumerExport `
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.requiredProvider:aetheria" `
--expect-runtime-lifecycle-field "unity-uitoolkit:capture:captureContract.requiredSurface:aetheria.daemon.game" `
--expect-runtime-lifecycle-status unity-scene:release:pending-unity-scene-package `
--expect-runtime-lifecycle-status unity-scene:test:pending-provider-advertisement-scene-smoke `
--expect-runtime-lifecycle-status unity-scene:test:provider-shell-contract-skeleton `
--expect-runtime-lifecycle-status unity-scene:capture:pending-unity-scene-capture `
--expect-runtime-lifecycle-pending "unity-scene:release:Unity scene package release" `
--expect-runtime-lifecycle-pending "unity-scene:test:Unity scene provider-advertisement smoke" `

View file

@ -46,13 +46,13 @@ try {
--expect-split-target-blocker "EveUnity:runtime:unity-scene:status:pending" `
--expect-split-target-blocker-record EveUnity:runtime-status:unity-scene `
--expect-split-target-blocker-record EveUnity:runtime-plugin-projection:unity-scene:sai.vn `
--expect-split-target-blocker-record "EveUnity:pending-proof:Unity scene runtime body exists outside Aetheria product code." `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-runtime-body:replacement-required:no-source-paths:none `
--expect-split-target-blocker-record "EveUnity:pending-proof:Unity scene runtime body graduates to EveUnity outside Aetheria product code." `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-runtime-body:current:exists:EveUnitySceneSurfaceLowerer.cs `
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-command-transport:replacement-required:no-source-paths:none `
--expect-split-target-blocker "EveUnity:Tagged UPM release" `
--expect-split-target-blocker "EveUnity:Unity batchmode EditMode runner" `
--expect-split-target-blocker "EveUnity:Unity batchmode or editor capture artifact" `
--expect-split-target-blocker "EveUnity:Unity scene runtime body exists outside Aetheria product code" `
--expect-split-target-blocker "EveUnity:Unity scene runtime body graduates to EveUnity outside Aetheria product code" `
--expect-split-target EveElectron `
--expect-split-target-status EveElectron:incubating `
--expect-split-target-proof "EveElectron:EveElectron split handoff is machine-readable" `