191 lines
8.2 KiB
JSON
191 lines
8.2 KiB
JSON
{
|
|
"schema": "gamecult.eve.runtime_capability.v1",
|
|
"runtimeId": "electron-shell",
|
|
"title": "Electron shell",
|
|
"owner": "EveElectron",
|
|
"incubation": {
|
|
"ownerRepo": "EveElectron",
|
|
"currentHostRepo": "Eve",
|
|
"splitTarget": "EveElectron",
|
|
"graduationTrigger": "Split when Electron has a provider-agnostic shell body, provider advertisement consumption, command transport, packaged app lifecycle, and capture evidence independent of Aetheria product code.",
|
|
"splitHandoff": {
|
|
"manifestPath": "runtimes/incubating/eve-electron/eveelectron-split-handoff.json",
|
|
"smokeCommand": "powershell -ExecutionPolicy Bypass -File .\\scripts\\run-eveelectron-split-handoff-smoke.ps1"
|
|
}
|
|
},
|
|
"supportedFeatures": [
|
|
"providerAdvertisements",
|
|
"commandTransport",
|
|
"surfaceTreeProjection",
|
|
"embeddedDocuments",
|
|
"pluginProjection"
|
|
],
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": [
|
|
"vn.stage",
|
|
"story.choose",
|
|
"story.continue",
|
|
"story.jump"
|
|
],
|
|
"projectionAdapter": "EveElectronShell.buildPluginProjection"
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": [
|
|
"embed.norn"
|
|
],
|
|
"projectionAdapter": "EveElectronShell.buildPluginProjection"
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": [
|
|
"embed.tex",
|
|
"tex.inline",
|
|
"tex.block"
|
|
],
|
|
"projectionAdapter": "EveElectronShell.buildPluginProjection"
|
|
}
|
|
],
|
|
"unsupportedPlugins": [],
|
|
"worldSurfaceLowering": [
|
|
{
|
|
"targetId": "electron-shell",
|
|
"surfaceKinds": ["interactive-world", "interactive-world-editor"],
|
|
"projectionKinds": ["provider-authored-world-surface", "provider-authored-world-editor-surface"],
|
|
"supportLevel": "electron-shell-surface-tree-command-surface",
|
|
"ownership": "runtime-lowers-provider-world-surface-without-owning-world-state",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-electron/src/eve-electron-shell.mjs",
|
|
"runtimes/incubating/eve-electron/test/eve-electron-shell.test.mjs",
|
|
"web/fixtures/sai-vn-surface.json",
|
|
"web/fixtures/aetheria.provider-advertisement.json",
|
|
"web/fixtures/eve-world-smoke.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"commandTransport": {
|
|
"schema": "gamecult.eve.command_invocation.v1",
|
|
"status": "provider-shell-contract-skeleton",
|
|
"emitter": "EveElectronShell.createCommandIntent",
|
|
"clientId": "electron-shell",
|
|
"authority": "Electron emits command intents through provider-advertised command boundaries; providers accept, deny, and publish receipts."
|
|
},
|
|
"lifecycle": {
|
|
"release": {
|
|
"ownerRepo": "EveElectron",
|
|
"status": "pending-electron-package",
|
|
"releaseContract": {
|
|
"ownerRepo": "EveElectron",
|
|
"packageName": "eve-electron",
|
|
"packageRoot": "runtimes/incubating/eve-electron",
|
|
"versionSource": "runtimes/incubating/eve-electron/package.json",
|
|
"tagPattern": "eveelectron-v{version}",
|
|
"artifactKind": "electron-app",
|
|
"requestSchema": "gamecult.eve.runtime_release_request.v1",
|
|
"requestBuilder": "tools/eveelectron/eveelectron-release-contract.mjs",
|
|
"artifactPattern": "artifacts/eveelectron-release/{version}/eve-electron-{version}.zip",
|
|
"publishProof": "Packaged Electron release is created from the EveElectron repo and references the provider-agnostic shell package root."
|
|
},
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-electron/package.json",
|
|
"runtimes/incubating/eve-electron/src/eve-electron-shell.mjs",
|
|
"runtimes/incubating/eve-electron/eveelectron-split-handoff.json",
|
|
"scripts/run-eveelectron-split-handoff-smoke.ps1",
|
|
"scripts/run-eveelectron-release-contract-smoke.ps1",
|
|
"tools/eveelectron/eveelectron-release-contract.mjs",
|
|
"tools/eveelectron/eveelectron-release-contract.test.mjs"
|
|
],
|
|
"pendingProofs": [
|
|
"Electron packaged app release is cut from EveElectron rather than Eve incubation."
|
|
]
|
|
},
|
|
"test": {
|
|
"ownerRepo": "EveElectron",
|
|
"status": "provider-shell-contract-skeleton",
|
|
"testContract": {
|
|
"ownerRepo": "EveElectron",
|
|
"runnerKind": "electron-provider-shell-smoke",
|
|
"runnerScript": "scripts/run-eveelectron-provider-shell-smoke.ps1",
|
|
"consumerProject": "E:\\Projects\\Aetheria",
|
|
"packageName": "eve-electron",
|
|
"testAssembly": "eve-electron-shell.test.mjs",
|
|
"testPlatform": "Node contract skeleton",
|
|
"resultsArtifact": "artifacts/eveelectron-provider-shell/{stamp}/provider-shell-results.json",
|
|
"logArtifact": "artifacts/eveelectron-provider-shell/{stamp}/provider-shell.log",
|
|
"manifestMutation": "None; the shell consumes provider advertisements and must not mutate provider product manifests."
|
|
},
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-electron/package.json",
|
|
"runtimes/incubating/eve-electron/src/eve-electron-shell.mjs",
|
|
"runtimes/incubating/eve-electron/test/eve-electron-shell.test.mjs",
|
|
"runtimes/incubating/eve-electron/eveelectron-split-handoff.json",
|
|
"scripts/run-eveelectron-split-handoff-smoke.ps1",
|
|
"scripts/run-eveelectron-provider-shell-smoke.ps1"
|
|
],
|
|
"pendingProofs": [
|
|
"Electron provider-advertisement smoke runs from EveElectron in a packaged Electron window without importing Aetheria source layout."
|
|
]
|
|
},
|
|
"capture": {
|
|
"ownerRepo": "EveElectron",
|
|
"status": "pending-electron-window-capture",
|
|
"captureContract": {
|
|
"ownerRepo": "EveElectron",
|
|
"runtimeId": "electron-shell",
|
|
"targetId": "electron-shell",
|
|
"requestSchema": "gamecult.eve.runtime_capture_request.v1",
|
|
"requestBuilder": "tools/eveelectron/eveelectron-capture-contract.mjs",
|
|
"advertisementPath": "web/fixtures/aetheria.provider-advertisement.json",
|
|
"captureKind": "electron-window-png",
|
|
"artifactKind": "png",
|
|
"artifactPattern": "artifacts/eveelectron-capture/{stamp}/electron-shell.png",
|
|
"conformanceAttachment": "runtime.captureArtifacts[]",
|
|
"requiredProvider": "aetheria",
|
|
"requiredSurface": "aetheria.daemon.game",
|
|
"additionalProviderSurfaces": [
|
|
{
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"purpose": "Generic non-product interactive-world capture control."
|
|
},
|
|
{
|
|
"providerId": "aetheria",
|
|
"surfaceId": "aetheria.daemon.editor",
|
|
"purpose": "Aetheria interactive-world-editor capture control."
|
|
}
|
|
],
|
|
"authority": "Capture observes Electron projection only; provider state, command acceptance, and receipts stay provider-owned.",
|
|
"publishProof": "Electron window capture artifact is attached to the runtime conformance report from EveElectron."
|
|
},
|
|
"evidencePaths": [
|
|
"tools/eveelectron/eveelectron-capture-contract.mjs",
|
|
"tools/eveelectron/eveelectron-capture-contract.test.mjs",
|
|
"tools/eveelectron/eveelectron-capture-artifact.mjs",
|
|
"tools/eveelectron/eveelectron-capture-artifact.test.mjs",
|
|
"scripts/run-eveelectron-capture-contract-smoke.ps1",
|
|
"scripts/run-eveelectron-capture-smoke.ps1"
|
|
],
|
|
"pendingProofs": [
|
|
"Electron window capture artifact is attached to the runtime conformance report."
|
|
]
|
|
}
|
|
},
|
|
"capture": {
|
|
"status": "json-projection",
|
|
"note": "Electron attaches a provider-advertisement-backed gamecult.eve.electron_shell_projection.v1 JSON projection artifact; packaged window PNG capture remains an EveElectron split blocker.",
|
|
"artifacts": [
|
|
{
|
|
"kind": "json-projection",
|
|
"schema": "gamecult.eve.electron_shell_projection.v1",
|
|
"path": "artifacts/eveelectron-capture/latest/electron-shell-projection.json",
|
|
"runtimeId": "electron-shell",
|
|
"providerId": "aetheria",
|
|
"surfaceId": "aetheria.daemon.game",
|
|
"sourceSurfacePath": "web/fixtures/aetheria-world-surface.json",
|
|
"requestPath": "artifacts/eveelectron-capture/latest/capture-request.json"
|
|
}
|
|
]
|
|
}
|
|
}
|