diff --git a/docs/eve-migration-roadmap.md b/docs/eve-migration-roadmap.md index b0f4c19..6e43550 100644 --- a/docs/eve-migration-roadmap.md +++ b/docs/eve-migration-roadmap.md @@ -436,9 +436,10 @@ Recently cut: - Unity scene now has a direct split handoff smoke at `scripts/run-eveunity-scene-split-handoff-smoke.ps1`. The smoke verifies the scene runtime's current source paths for runtime body, scene graph lowering, - and command transport, does not treat Aetheria product paths as generic - runtime source, names the required Eve contracts, and keeps capture as an - external proof until EveUnity owns it. + Norn plugin projection, and command transport, does not treat Aetheria + product paths or Norn implementation state as generic runtime source, names + the required Eve contracts, and keeps capture as an external proof until + EveUnity owns it. - Runtime split handoff documents now have a catalog-backed schema, `gamecult.eve.runtime_split_handoff.v1`. EveConformance exports that schema so runtime owner repos can consume split target, move set, contract input, diff --git a/runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json b/runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json index eecd860..be2d323 100644 --- a/runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json +++ b/runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json @@ -16,6 +16,7 @@ "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/Runtime/NornGraphUnitySceneProjectionAdapter.cs", "runtimes/incubating/eve-unity-scene/Tests/Editor/GameCult.Eve.UnityScene.Tests.asmdef", "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs" ], @@ -27,12 +28,25 @@ "stage": "world-surface-lowering", "currentPaths": [ "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs", + "runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs", "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs", "runtimes/incubating/eve-unity-scene/eve-runtime-capability.json" ], "destinationOwner": "EveUnity", "replacementProof": "EveUnity claims the provider-advertised unity-scene lowering target with provider-agnostic scene graph projection and command boundary evidence; capture remains a separate lifecycle proof." }, + { + "id": "unity-scene-norn-plugin-projection", + "stage": "plugin-projection", + "currentPaths": [ + "runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs", + "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs", + "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs", + "runtimes/incubating/eve-unity-scene/eve-runtime-capability.json" + ], + "destinationOwner": "EveUnity", + "replacementProof": "EveUnity owns only the Unity scene projection adapter for Norn's sidecar-advertised embed.norn capability; Norn keeps graph layout, graph state, and graph command semantics." + }, { "id": "unity-scene-command-transport", "stage": "command", @@ -68,12 +82,14 @@ "Aetheria gameplay scripts as EveUnity scene lowerer truth", "provider-specific scene components that bypass gamecult.eve.command.v1", "renderer-local world simulation as provider truth", - "product assets bundled as Eve runtime contract" + "product assets bundled as Eve runtime contract", + "Norn graph layout, graph state, or command semantics as Unity scene runtime authority" ], "requiredExternalProofs": [ "EveUnity publishes a Unity scene runtime capability manifest.", "EveUnity owns a provider-agnostic scene graph lowerer that consumes advertised worldInteraction boundaries without importing Aetheria internals.", "EveUnity owns the provider-agnostic scene graph lowerer outside Eve incubation.", + "EveUnity owns the Unity scene Norn projection adapter outside Eve incubation without importing Norn implementation state.", "EveUnity lowers at least one non-Aetheria provider-authored world surface into Unity scene objects.", "EveUnity lowers Aetheria's game world surface through provider advertisements without importing Aetheria internals.", "Unity scene input emits gamecult.eve.command.v1 intents and renders provider receipts.", diff --git a/scripts/run-eveunity-scene-split-handoff-smoke.ps1 b/scripts/run-eveunity-scene-split-handoff-smoke.ps1 index 0611fb8..844fe39 100644 --- a/scripts/run-eveunity-scene-split-handoff-smoke.ps1 +++ b/scripts/run-eveunity-scene-split-handoff-smoke.ps1 @@ -45,6 +45,7 @@ $moveSets = @($handoff.moveSets) $expectedMoveSets = @{ "unity-scene-runtime-body" = "runtime-body" "unity-scene-world-surface-lowering" = "world-surface-lowering" + "unity-scene-norn-plugin-projection" = "plugin-projection" "unity-scene-command-transport" = "command" "unity-scene-capture-lifecycle" = "capture" } @@ -65,7 +66,7 @@ foreach ($id in $expectedMoveSets.Keys) { } $currentPaths = if ($null -eq $moveSet.currentPaths) { @() } else { @($moveSet.currentPaths) } $observedProviderPaths = if ($null -eq $moveSet.observedProviderPaths) { @() } else { @($moveSet.observedProviderPaths) } - if ($id -in @("unity-scene-runtime-body", "unity-scene-world-surface-lowering", "unity-scene-command-transport", "unity-scene-capture-lifecycle")) { + if ($id -in @("unity-scene-runtime-body", "unity-scene-world-surface-lowering", "unity-scene-norn-plugin-projection", "unity-scene-command-transport", "unity-scene-capture-lifecycle")) { if ($currentPaths.Count -eq 0) { throw "EveUnity scene split handoff move set $id must name current Eve incubation paths" } @@ -98,13 +99,19 @@ foreach ($forbiddenImport in @( "Aetheria gameplay scripts as EveUnity scene lowerer truth", "provider-specific scene components that bypass gamecult.eve.command.v1", "renderer-local world simulation as provider truth", - "product assets bundled as Eve runtime contract" + "product assets bundled as Eve runtime contract", + "Norn graph layout, graph state, or command semantics as Unity scene runtime authority" )) { if (-not (@($handoff.forbiddenImports) -contains $forbiddenImport)) { throw "EveUnity scene split handoff missing forbidden import: $forbiddenImport" } } +$nornProjectionMoveSet = $moveSets | Where-Object { $_.id -eq "unity-scene-norn-plugin-projection" } | Select-Object -First 1 +if (-not (@($nornProjectionMoveSet.currentPaths) -contains "runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs")) { + throw "EveUnity scene split handoff Norn projection move set must include the scene adapter path" +} + foreach ($proof in @($handoff.requiredExternalProofs)) { if (-not $proof) { throw "EveUnity scene split handoff contains an empty required external proof" diff --git a/scripts/run-split-target-conformance-consumer-smoke.ps1 b/scripts/run-split-target-conformance-consumer-smoke.ps1 index 4febdf7..6a0c9b9 100644 --- a/scripts/run-split-target-conformance-consumer-smoke.ps1 +++ b/scripts/run-split-target-conformance-consumer-smoke.ps1 @@ -49,6 +49,7 @@ try { --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-world-surface-lowering:current:exists:EveUnitySceneSurfaceLowerer.cs ` + --expect-split-handoff-move EveUnity:unity-scene:unity-scene-norn-plugin-projection:current:exists:NornGraphUnitySceneProjectionAdapter.cs ` --expect-split-handoff-move EveUnity:unity-scene:unity-scene-command-transport:current:exists:EveUnitySceneSurfaceLowerer.cs ` --expect-split-handoff-move EveUnity:unity-scene:unity-scene-capture-lifecycle:current:exists:eveunity-capture-contract.mjs ` --expect-split-target-blocker "EveUnity:Tagged UPM release" ` diff --git a/tools/parity/parity-manifest.json b/tools/parity/parity-manifest.json index f59e210..0d43b74 100644 --- a/tools/parity/parity-manifest.json +++ b/tools/parity/parity-manifest.json @@ -610,11 +610,12 @@ ] }, { - "description": "Unity scene graph projection lowerer exists without claiming provider simulation, plugin projection, or capture ownership.", + "description": "Unity scene graph projection lowerer and Norn projection adapter exist without claiming provider simulation, Norn semantics, or capture ownership.", "status": "passed", "evidencePaths": [ "runtimes/incubating/eve-unity-scene/package.json", "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs", + "runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs", "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs", "scripts/run-eveunity-scene-provider-shell-smoke.ps1" ]