Thing/runtimes/incubating/eve-unity-scene/eve-runtime-capability.json
2026-07-09 16:03:45 +01:00

198 lines
9.1 KiB
JSON

{
"schema": "gamecult.eve.runtime_capability.v1",
"runtimeId": "unity-scene",
"title": "Unity / Scene",
"owner": "EveUnity",
"incubation": {
"ownerRepo": "EveUnity",
"currentHostRepo": "Eve",
"splitTarget": "EveUnity",
"graduationTrigger": "Split with EveUnity when a provider-agnostic Unity scene lowerer consumes provider world surfaces, emits command intents, and attaches scene capture evidence without importing Aetheria product code.",
"splitHandoff": {
"manifestPath": "runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
"smokeCommand": "powershell -ExecutionPolicy Bypass -File .\\scripts\\run-eveunity-scene-split-handoff-smoke.ps1"
}
},
"supportedFeatures": [
"providerAdvertisements",
"commandTransport",
"sceneGraphProjection",
"embeddedDocuments"
],
"supportedPlugins": [
{
"pluginId": "sai.vn",
"capabilities": [
"vn.stage",
"story.choose",
"story.continue",
"story.jump"
],
"projectionAdapter": "SaiVisualNovelUnitySceneProjectionAdapter"
},
{
"pluginId": "norn.graph",
"capabilities": [
"embed.norn"
],
"projectionAdapter": "NornGraphUnitySceneProjectionAdapter"
},
{
"pluginId": "tex.math",
"capabilities": [
"embed.tex",
"tex.inline",
"tex.block",
"tex.scene-placement"
],
"projectionAdapter": "TeXMathUnitySceneProjectionAdapter"
}
],
"unsupportedPlugins": [],
"worldSurfaceLowering": [
{
"targetId": "unity-scene",
"surfaceKinds": ["interactive-world"],
"projectionKinds": ["provider-authored-world-surface"],
"supportLevel": "unity-scene-graph-command-surface",
"ownership": "runtime-lowers-provider-world-surface-without-owning-world-state",
"evidencePaths": [
"runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs",
"runtimes/incubating/eve-unity-scene/Runtime/SaiVisualNovelUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/TeXMathUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
"web/fixtures/aetheria.provider-advertisement.json"
]
}
],
"commandTransport": {
"schema": "gamecult.eve.command.v1",
"status": "provider-shell-contract-skeleton",
"emitter": "EveUnitySceneSurfaceLowerer.CreateCommandIntent",
"clientId": "unity-scene",
"authority": "Unity scene input emits command intents through provider-advertised command boundaries; providers accept, deny, and publish receipts."
},
"lifecycle": {
"release": {
"ownerRepo": "EveUnity",
"status": "pending-unity-scene-package",
"releaseContract": {
"ownerRepo": "EveUnity",
"packageName": "org.gamecult.eve.unity-scene",
"packageRoot": "runtimes/incubating/eve-unity-scene",
"versionSource": "runtimes/incubating/eve-unity-scene/package.json",
"tagPattern": "eveunity-scene-v{version}",
"artifactKind": "upm-package",
"requestSchema": "gamecult.eve.runtime_release_request.v1",
"requestBuilder": "tools/eveunity/eveunity-release-contract.mjs",
"artifactPattern": "artifacts/eveunity-scene-release/{version}/org.gamecult.eve.unity-scene-{version}.tgz",
"publishProof": "Tagged Unity scene package release is created from the EveUnity repo and references the provider-agnostic scene package root.",
"requiredPackageDependencies": [
{
"packageName": "org.gamecult.eve.surface",
"version": "0.1.0",
"packageManager": "upm",
"ownerRepo": "Eve",
"purpose": "Shared Unity DTOs for gamecult.eve.surface.v1 documents."
}
]
},
"evidencePaths": [
"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/SaiVisualNovelUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/TeXMathUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
"scripts/run-eveunity-scene-split-handoff-smoke.ps1",
"scripts/run-eveunity-scene-release-contract-smoke.ps1",
"tools/eveunity/eveunity-release-contract.mjs",
"tools/eveunity/eveunity-release-contract.test.mjs"
],
"pendingProofs": [
"Unity scene package release is cut from EveUnity rather than Eve incubation."
]
},
"test": {
"ownerRepo": "EveUnity",
"status": "provider-shell-contract-skeleton",
"testContract": {
"ownerRepo": "EveUnity",
"runnerKind": "unity-scene-provider-shell-smoke",
"runnerScript": "scripts/run-eveunity-scene-provider-shell-smoke.ps1",
"consumerProject": "E:\\Projects\\Aetheria",
"packageName": "org.gamecult.eve.unity-scene",
"testAssembly": "GameCult.Eve.UnityScene.Tests",
"testPlatform": "EditMode contract skeleton",
"resultsArtifact": "artifacts/eveunity-scene-provider-shell/{stamp}/provider-shell-results.json",
"logArtifact": "artifacts/eveunity-scene-provider-shell/{stamp}/provider-shell.log",
"manifestMutation": "None; the scene lowerer consumes provider advertisements and must not mutate provider product manifests."
},
"evidencePaths": [
"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/SaiVisualNovelUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Runtime/TeXMathUnitySceneProjectionAdapter.cs",
"runtimes/incubating/eve-unity-scene/Tests/Editor/GameCult.Eve.UnityScene.Tests.asmdef",
"runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
"runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
"scripts/run-eveunity-scene-split-handoff-smoke.ps1",
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
],
"pendingProofs": [
"Unity scene provider-advertisement smoke runs from EveUnity with real Unity scene/frame objects and no Aetheria imports."
]
},
"capture": {
"ownerRepo": "EveUnity",
"status": "pending-unity-scene-capture",
"captureContract": {
"ownerRepo": "EveUnity",
"runtimeId": "unity-scene",
"targetId": "unity-scene",
"requestSchema": "gamecult.eve.runtime_capture_request.v1",
"requestBuilder": "tools/eveunity/eveunity-capture-contract.mjs",
"advertisementPath": "web/fixtures/aetheria.provider-advertisement.json",
"captureKind": "unity-scene-frame-png",
"artifactKind": "png",
"artifactPattern": "artifacts/eveunity-scene-capture/{stamp}/unity-scene.png",
"conformanceAttachment": "runtime.captureArtifacts[]",
"requiredProvider": "aetheria",
"requiredSurface": "aetheria.daemon.game",
"authority": "Capture observes Unity scene projection only; provider state, command acceptance, and receipts stay provider-owned.",
"publishProof": "Unity scene screenshot or frame-capture PNG artifact is attached to the runtime conformance report from EveUnity."
},
"evidencePaths": [
"tools/eveunity/eveunity-capture-contract.mjs",
"tools/eveunity/eveunity-capture-contract.test.mjs",
"tools/eveunity/eveunity-scene-capture-artifact.mjs",
"tools/eveunity/eveunity-scene-capture-artifact.test.mjs",
"scripts/run-eveunity-scene-capture-contract-smoke.ps1",
"scripts/run-eveunity-scene-capture-smoke.ps1"
],
"pendingProofs": [
"Unity scene screenshot or frame-capture PNG artifact is attached to the runtime conformance report."
]
}
},
"capture": {
"status": "json-projection",
"note": "Unity scene attaches a provider-advertisement-backed gamecult.eve.unity_scene_projection.v1 JSON projection artifact; Unity screenshot or frame-capture PNG remains an EveUnity split blocker.",
"artifacts": [
{
"kind": "json-projection",
"schema": "gamecult.eve.unity_scene_projection.v1",
"path": "artifacts/eveunity-scene-capture/latest/unity-scene-projection.json",
"runtimeId": "unity-scene",
"providerId": "aetheria",
"surfaceId": "aetheria.daemon.game",
"sourceSurfacePath": "web/fixtures/aetheria-world-surface.json",
"requestPath": "artifacts/eveunity-scene-capture/latest/capture-request.json"
}
]
}
}