1567 lines
70 KiB
JSON
1567 lines
70 KiB
JSON
{
|
|
"schema": "gamecult.eve.parity_manifest.v1",
|
|
"repoStrategy": {
|
|
"boundaryRule": "Eve core owns contracts; plugins own semantics; runtime repos own native projection; provider repos own live truth.",
|
|
"incubationPolicy": "Eve may host runtimes, plugins, and conformance packs only while their contract is still forming.",
|
|
"graduationDocument": "docs/repo-strategy.md",
|
|
"conformanceHandoffPath": "tools/conformance/eveconformance-handoff.json"
|
|
},
|
|
"schemas": {
|
|
"gamecult.eve.conformance_fixture.v1": "schemas/gamecult.eve.conformance_fixture.v1.schema.json",
|
|
"gamecult.eve.conformance_export.v1": "schemas/gamecult.eve.conformance_export.v1.schema.json",
|
|
"gamecult.eve.capability_matrix.v1": "schemas/gamecult.eve.capability_matrix.v1.schema.json",
|
|
"gamecult.eve.command.v1": "schemas/gamecult.eve.command.v1.schema.json",
|
|
"gamecult.eve.command_receipt.v1": "schemas/gamecult.eve.command_receipt.v1.schema.json",
|
|
"gamecult.eve.plugin.v1": "schemas/gamecult.eve.plugin.v1.schema.json",
|
|
"gamecult.eve.plugin_receipt.v1": "schemas/gamecult.eve.plugin_receipt.v1.schema.json",
|
|
"gamecult.eve.plugin_abi.request.v1": "schemas/gamecult.eve.plugin_abi.request.v1.schema.json",
|
|
"gamecult.eve.plugin_abi.response.v1": "schemas/gamecult.eve.plugin_abi.response.v1.schema.json",
|
|
"gamecult.eve.plugin_abi_fixture.v1": "schemas/gamecult.eve.plugin_abi_fixture.v1.schema.json",
|
|
"gamecult.eve.plugin_advertisement.v1": "schemas/gamecult.eve.plugin_advertisement.v1.schema.json",
|
|
"gamecult.eve.runtime_capability.v1": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"gamecult.eve.runtime_split_handoff.v1": "schemas/gamecult.eve.runtime_split_handoff.v1.schema.json",
|
|
"gamecult.eve.runtime_release_request.v1": "schemas/gamecult.eve.runtime_release_request.v1.schema.json",
|
|
"gamecult.eve.runtime_capture_request.v1": "schemas/gamecult.eve.runtime_capture_request.v1.schema.json",
|
|
"gamecult.eve.provider_scenario.v1": "schemas/gamecult.eve.provider_scenario.v1.schema.json",
|
|
"gamecult.eve.provider_advertisement.v1": "schemas/gamecult.eve.provider_advertisement.v1.schema.json"
|
|
},
|
|
"conformancePacks": [
|
|
{
|
|
"id": "core",
|
|
"ownerRepo": "Eve",
|
|
"exitCriteria": "Stays in Eve; proves surface contract, CultUI DSL, bindings, commands, and embedded documents."
|
|
},
|
|
{
|
|
"id": "plugin",
|
|
"ownerRepo": "EvePlugins until owner repos stabilize",
|
|
"exitCriteria": "Moves when plugin semantics, fixtures, and conformance cases are stable."
|
|
},
|
|
{
|
|
"id": "provider",
|
|
"ownerRepo": "Provider repo",
|
|
"exitCriteria": "Moves when fixture carries product-specific state, assets, flows, or receipts."
|
|
},
|
|
{
|
|
"id": "runtime",
|
|
"ownerRepo": "Runtime repo",
|
|
"exitCriteria": "Moves when runtime has its own build/deploy lifecycle or platform SDK pressure."
|
|
}
|
|
],
|
|
"responsiveCases": [
|
|
{
|
|
"id": "phone",
|
|
"width": 390,
|
|
"height": 844,
|
|
"orientation": "portrait",
|
|
"deviceScale": 1
|
|
},
|
|
{
|
|
"id": "tablet",
|
|
"width": 768,
|
|
"height": 1024,
|
|
"orientation": "portrait",
|
|
"deviceScale": 1
|
|
},
|
|
{
|
|
"id": "desktop",
|
|
"width": 1280,
|
|
"height": 720,
|
|
"orientation": "landscape",
|
|
"deviceScale": 1
|
|
}
|
|
],
|
|
"androidDeviceCases": [
|
|
{
|
|
"id": "native-portrait",
|
|
"orientation": "portrait"
|
|
},
|
|
{
|
|
"id": "native-landscape",
|
|
"orientation": "landscape"
|
|
}
|
|
],
|
|
"fixtures": [
|
|
{
|
|
"id": "cultui-inspector",
|
|
"title": "CultUI Inspector",
|
|
"pack": "core",
|
|
"ownerRepo": "Eve",
|
|
"surface": {
|
|
"transport": "local-eve-dsl",
|
|
"path": "web/fixtures/cultui-slider-inspector.eve"
|
|
},
|
|
"metadataPath": "web/fixtures/cultui-slider-inspector.conformance.json",
|
|
"expect": {
|
|
"providerId": "eve.cultui.inspector",
|
|
"componentKinds": ["surface", "partition", "pane", "label", "control.slider"],
|
|
"minimumCounts": {
|
|
"partition": 8,
|
|
"control.slider": 3,
|
|
"label": 3
|
|
},
|
|
"controlSkins": ["inspector.orangeSlider"],
|
|
"controlParts": ["track", "fill", "thumb"],
|
|
"bindings": ["tester.fov", "tester.throttleDecay", "tester.flowSpeed"]
|
|
}
|
|
},
|
|
{
|
|
"id": "repixelizer",
|
|
"title": "Repixelizer",
|
|
"pack": "provider",
|
|
"ownerRepo": "Repixelizer",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/repixelizer.eve-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/repixelizer.conformance.json",
|
|
"expect": {
|
|
"providerId": "repixelizer",
|
|
"componentKinds": [
|
|
"surface",
|
|
"pane",
|
|
"card",
|
|
"text",
|
|
"image.preview",
|
|
"canvas.preview",
|
|
"canvas.editor",
|
|
"input.file",
|
|
"dropzone",
|
|
"input.number",
|
|
"control.button",
|
|
"status.stage"
|
|
],
|
|
"styleTokens": [
|
|
"colorBackgroundTop",
|
|
"colorPanel",
|
|
"colorAccent",
|
|
"fontTitle",
|
|
"fontBody",
|
|
"imageRendering"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "sai-vn",
|
|
"title": "Sai VN",
|
|
"pack": "plugin",
|
|
"ownerRepo": "Sai",
|
|
"requiredPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/sai-vn-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/sai-vn-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "gamecult.home.vn",
|
|
"componentKinds": [
|
|
"vn.stage",
|
|
"image.background",
|
|
"embed.norn",
|
|
"embed.tex",
|
|
"panel.dialogue",
|
|
"rail.actions",
|
|
"control.button"
|
|
],
|
|
"styleTokens": [
|
|
"colorBackground",
|
|
"colorPanel",
|
|
"colorPanelAlt",
|
|
"colorText",
|
|
"colorAccent",
|
|
"fontBody",
|
|
"fontTitle",
|
|
"pixelArt"
|
|
],
|
|
"commandDescriptors": ["story.continue", "story.choose", "story.jump", "style.patch"],
|
|
"commandDescriptorSchema": "gamecult.eve.command.v1",
|
|
"commandReferencesDeclared": true
|
|
}
|
|
},
|
|
{
|
|
"id": "aetheria-world",
|
|
"title": "Aetheria Interactive World",
|
|
"pack": "provider",
|
|
"ownerRepo": "Aetheria",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/aetheria-world-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/aetheria-world-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "aetheria",
|
|
"componentKinds": ["surface", "card", "text", "metric", "partition", "field.surface2d", "control.button"],
|
|
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent"],
|
|
"bindings": ["aetheria.daemon.frameId", "aetheria.daemon.soaView.gravityField", "aetheria.daemon.commands"],
|
|
"commandDescriptors": ["aetheria.daemon.commands"],
|
|
"commandDescriptorSchema": "gamecult.eve.command.v1",
|
|
"commandReferencesDeclared": true
|
|
}
|
|
},
|
|
{
|
|
"id": "fensalir-direct2d",
|
|
"title": "Fensalir Direct2D Adapter",
|
|
"pack": "runtime",
|
|
"ownerRepo": "Fensalir",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/fensalir-direct2d-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/fensalir-direct2d-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "fensalir.direct2d",
|
|
"componentKinds": ["surface", "card", "text", "metric", "partition", "surface.slot", "control.button"],
|
|
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent"],
|
|
"bindings": ["fensalir.overlay.phase"],
|
|
"embeddedDocuments": ["fensalir.adapter.detail"],
|
|
"commandDescriptors": ["fensalir.overlay.commands"],
|
|
"commandDescriptorSchema": "gamecult.eve.command.v1",
|
|
"commandReferencesDeclared": true,
|
|
"authorityStates": ["fresh"],
|
|
"authorityOwners": ["runtime"],
|
|
"witnessRefs": 1
|
|
}
|
|
},
|
|
{
|
|
"id": "authority-staleness",
|
|
"title": "Authority And Staleness Witness",
|
|
"pack": "core",
|
|
"ownerRepo": "Eve",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/authority-staleness-witness.json"
|
|
},
|
|
"metadataPath": "web/fixtures/authority-staleness-witness.conformance.json",
|
|
"expect": {
|
|
"providerId": "gamecult.eve.authority-witness",
|
|
"componentKinds": ["surface", "card", "text", "metric", "partition"],
|
|
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent", "colorWarning", "colorDanger"],
|
|
"bindings": [
|
|
"authority.temperature.accepted",
|
|
"authority.sensor.echo",
|
|
"authority.missing.field",
|
|
"authority.orbit.predicted",
|
|
"authority.orbit.accepted"
|
|
],
|
|
"commandDescriptors": ["authority.fixture.patch"],
|
|
"commandDescriptorSchema": "gamecult.eve.command.v1",
|
|
"commandReferencesDeclared": true,
|
|
"authorityStates": ["accepted", "denied", "fresh", "missing", "pending", "predicted", "reconciled", "stale"],
|
|
"authorityOwners": ["provider", "renderer"],
|
|
"witnessRefs": 8,
|
|
"receiptRefs": 2
|
|
}
|
|
},
|
|
{
|
|
"id": "reactive-dsl",
|
|
"title": "Reactive DSL",
|
|
"pack": "core",
|
|
"ownerRepo": "Eve",
|
|
"surface": {
|
|
"transport": "local-eve-dsl",
|
|
"path": "web/fixtures/reactive-composition.eve"
|
|
},
|
|
"metadataPath": "web/fixtures/reactive-composition.conformance.json",
|
|
"expect": {
|
|
"providerId": "gamecult.eve.reactive-demo",
|
|
"componentKinds": ["surface", "card", "text", "metric", "list", "control.button"],
|
|
"bindings": ["face.name", "face.body", "swarm.heat", "swarm.eventCount", "swarm.latestEvent"]
|
|
}
|
|
},
|
|
{
|
|
"id": "huginn-cc",
|
|
"title": "Huginn .cc",
|
|
"pack": "provider",
|
|
"ownerRepo": "Huginn",
|
|
"surface": {
|
|
"transport": "local-eve-dsl",
|
|
"path": "web/fixtures/huginn-cc-surface.eve"
|
|
},
|
|
"metadataPath": "web/fixtures/huginn-cc-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "cultcache.huginn.inspector",
|
|
"componentKinds": ["surface", "card", "text", "list"],
|
|
"bindings": ["huginn.catalog.entries", "huginn.records.entries"]
|
|
}
|
|
},
|
|
{
|
|
"id": "embedded-surface",
|
|
"title": "Embedded Surface Slot",
|
|
"pack": "core",
|
|
"ownerRepo": "Eve",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/cultui-embedded-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/cultui-embedded-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "gamecult.eve.embedded-demo",
|
|
"componentKinds": ["surface", "card", "text", "surface.slot"],
|
|
"embeddedDocuments": ["inventory.dropdown"],
|
|
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent"]
|
|
}
|
|
}
|
|
],
|
|
"providerAdvertisements": [
|
|
{
|
|
"providerId": "repixelizer",
|
|
"title": "Repixelizer",
|
|
"kind": "service.product",
|
|
"ownerRepo": "Repixelizer",
|
|
"repoRole": "provider-external",
|
|
"graduationTrigger": "Provider-owned product state, assets, sessions, and receipts stay in Repixelizer; Eve keeps only the advertisement-shaped fixture.",
|
|
"schemaPath": "schemas/gamecult.eve.provider_advertisement.v1.schema.json",
|
|
"advertisementPath": "web/fixtures/repixelizer.provider-advertisement.json",
|
|
"requiredFixtures": ["repixelizer"],
|
|
"expectedSchemas": ["gamecult.eve.surface.v1"],
|
|
"expectedSurfaces": ["repixelizer.operator.surface"],
|
|
"expectedCommands": ["repixelizer.job.submit", "repixelizer.job.cancel_own"]
|
|
},
|
|
{
|
|
"providerId": "gamecult.home.vn",
|
|
"title": "GameCult Compound VN",
|
|
"kind": "plugin.fixture.provider",
|
|
"ownerRepo": "Sai",
|
|
"repoRole": "provider-fixture",
|
|
"graduationTrigger": "Move this advertisement-shaped VN fixture to Sai when sai-vn-plugin owns VN/Ink semantics and conformance packs.",
|
|
"schemaPath": "schemas/gamecult.eve.provider_advertisement.v1.schema.json",
|
|
"advertisementPath": "web/fixtures/sai-vn.provider-advertisement.json",
|
|
"requiredFixtures": [],
|
|
"expectedSchemas": ["gamecult.eve.surface.v1", "gamecult.eve.command.v1", "sai.vn.story_session.v1"],
|
|
"expectedSurfaces": ["sai.visual_novel.surface"],
|
|
"expectedCommands": ["story.continue", "story.choose", "story.jump", "style.patch"]
|
|
},
|
|
{
|
|
"providerId": "aetheria",
|
|
"title": "Aetheria",
|
|
"kind": "game.runtime",
|
|
"ownerRepo": "Aetheria",
|
|
"repoRole": "provider-external",
|
|
"graduationTrigger": "Aetheria owns RTS/ARPG world surfaces, generated level state, assets, command receipts, and scenario conformance; Eve keeps contract fixtures only.",
|
|
"schemaPath": "schemas/gamecult.eve.provider_advertisement.v1.schema.json",
|
|
"advertisementPath": "web/fixtures/aetheria.provider-advertisement.json",
|
|
"scenarioPath": "web/fixtures/aetheria-world-scenario.json",
|
|
"handoffPath": "web/fixtures/aetheria-provider-handoff.json",
|
|
"requiredFixtures": ["aetheria-world"],
|
|
"expectedSchemas": ["gamecult.eve.surface.v1", "gamecult.eve.command.v1", "aetheria.runtime.daemon.frame.v1"],
|
|
"expectedSurfaces": ["aetheria.daemon.game", "aetheria.daemon.editor"],
|
|
"expectedSurfaceKinds": {
|
|
"aetheria.daemon.game": "interactive-world",
|
|
"aetheria.daemon.editor": "interactive-world-editor"
|
|
},
|
|
"expectedCommands": ["aetheria.daemon.commands"],
|
|
"expectedPaths": [
|
|
"web/fixtures/aetheria-world-scenario.json",
|
|
"web/fixtures/aetheria-provider-handoff.json",
|
|
"scripts/run-aetheria-provider-handoff-smoke.ps1"
|
|
]
|
|
}
|
|
],
|
|
"pluginManifests": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"title": "Sai Visual Novel",
|
|
"kind": "external-owner-planned",
|
|
"ownerRepo": "Sai",
|
|
"repoRole": "plugin-incubating",
|
|
"splitTarget": "Sai/sai-vn-plugin",
|
|
"graduationTrigger": "Split when VN/Ink semantics, story command fixtures, and ABI project/apply/validate cases are stable.",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"],
|
|
"optionalPlugins": ["norn.graph", "tex.math"],
|
|
"expectedRuntime": {
|
|
"invocationModel": "executable-sidecar",
|
|
"contract": "gamecult.eve.plugin_abi.v1",
|
|
"transports": ["cultmesh", "stdio"],
|
|
"authority": ["renderer-independent", "no-provider-state-mutation", "provider-accepts-or-denies-commands"],
|
|
"sidecar": {
|
|
"processKind": "long-running-daemon",
|
|
"protocol": "cultmesh-rpc-with-stdio-dev-transport",
|
|
"requestSchema": "gamecult.eve.plugin_abi.request.v1",
|
|
"responseSchema": "gamecult.eve.plugin_abi.response.v1",
|
|
"commandEnvelope": "gamecult.eve.command.v1",
|
|
"receiptSchema": "gamecult.eve.command_receipt.v1",
|
|
"stateAuthority": "proposes-plugin-state-only-provider-accepts"
|
|
}
|
|
},
|
|
"requiredFixtures": ["sai-vn"],
|
|
"schemaPath": "schemas/gamecult.eve.plugin.v1.schema.json",
|
|
"manifestPath": "plugins/incubating/sai-vn.plugin.json",
|
|
"abiFixturePath": "plugins/incubating/sai-vn.plugin-abi-fixture.json",
|
|
"handoffPath": "plugins/incubating/sai-vn.plugin-handoff.json",
|
|
"advertisementSchemaPath": "schemas/gamecult.eve.plugin_advertisement.v1.schema.json",
|
|
"advertisementPath": "plugins/incubating/sai-vn.plugin-advertisement.json",
|
|
"expectedPaths": [
|
|
"plugins/incubating/sai-vn.plugin.json",
|
|
"plugins/incubating/sai-vn.plugin-abi-fixture.json",
|
|
"plugins/incubating/sai-vn.plugin-advertisement.json",
|
|
"plugins/incubating/sai-vn.plugin-handoff.json",
|
|
"scripts/run-plugin-handoff-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"title": "Norn Graph",
|
|
"kind": "external-owner-planned",
|
|
"ownerRepo": "Norn",
|
|
"repoRole": "plugin-incubating",
|
|
"splitTarget": "Norn/eve-plugin-graph",
|
|
"graduationTrigger": "Split when embed.norn graph layout, interaction, fallback, and conformance fixtures are stable.",
|
|
"capabilities": ["embed.norn", "graph.node.activate"],
|
|
"expectedRuntime": {
|
|
"invocationModel": "executable-sidecar",
|
|
"contract": "gamecult.eve.plugin_abi.v1",
|
|
"transports": ["cultmesh", "stdio"],
|
|
"authority": ["renderer-independent", "no-provider-state-mutation", "provider-accepts-or-denies-commands"],
|
|
"sidecar": {
|
|
"processKind": "long-running-daemon",
|
|
"protocol": "cultmesh-rpc-with-stdio-dev-transport",
|
|
"requestSchema": "gamecult.eve.plugin_abi.request.v1",
|
|
"responseSchema": "gamecult.eve.plugin_abi.response.v1",
|
|
"commandEnvelope": "gamecult.eve.command.v1",
|
|
"receiptSchema": "gamecult.eve.command_receipt.v1",
|
|
"stateAuthority": "proposes-plugin-state-only-provider-accepts"
|
|
}
|
|
},
|
|
"requiredFixtures": [],
|
|
"schemaPath": "schemas/gamecult.eve.plugin.v1.schema.json",
|
|
"manifestPath": "plugins/incubating/norn-graph.plugin.json",
|
|
"abiFixturePath": "plugins/incubating/norn-graph.plugin-abi-fixture.json",
|
|
"handoffPath": "plugins/incubating/norn-graph.plugin-handoff.json",
|
|
"advertisementSchemaPath": "schemas/gamecult.eve.plugin_advertisement.v1.schema.json",
|
|
"advertisementPath": "plugins/incubating/norn-graph.plugin-advertisement.json",
|
|
"expectedPaths": [
|
|
"plugins/incubating/norn-graph.plugin.json",
|
|
"plugins/incubating/norn-graph.plugin-abi-fixture.json",
|
|
"plugins/incubating/norn-graph.plugin-advertisement.json",
|
|
"plugins/incubating/norn-graph.plugin-handoff.json",
|
|
"scripts/run-plugin-handoff-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"title": "TeX Math",
|
|
"kind": "incubating",
|
|
"ownerRepo": "EvePlugins",
|
|
"repoRole": "plugin-incubating",
|
|
"splitTarget": "EvePlugins/eve-plugin-tex",
|
|
"graduationTrigger": "Split when TeX source, macro, baseline, cached render, and fallback fixtures are stable.",
|
|
"capabilities": ["embed.tex", "tex.inline", "tex.block"],
|
|
"expectedRuntime": {
|
|
"invocationModel": "executable-sidecar",
|
|
"contract": "gamecult.eve.plugin_abi.v1",
|
|
"transports": ["cultmesh", "stdio"],
|
|
"authority": ["renderer-independent", "no-provider-state-mutation", "provider-accepts-or-denies-commands"],
|
|
"sidecar": {
|
|
"processKind": "long-running-daemon",
|
|
"protocol": "cultmesh-rpc-with-stdio-dev-transport",
|
|
"requestSchema": "gamecult.eve.plugin_abi.request.v1",
|
|
"responseSchema": "gamecult.eve.plugin_abi.response.v1",
|
|
"commandEnvelope": "gamecult.eve.command.v1",
|
|
"receiptSchema": "gamecult.eve.plugin_receipt.v1",
|
|
"stateAuthority": "emits-render-results-only-provider-owns-source-state"
|
|
}
|
|
},
|
|
"requiredFixtures": [],
|
|
"schemaPath": "schemas/gamecult.eve.plugin.v1.schema.json",
|
|
"manifestPath": "plugins/incubating/tex-math.plugin.json",
|
|
"abiFixturePath": "plugins/incubating/tex-math.plugin-abi-fixture.json",
|
|
"handoffPath": "plugins/incubating/tex-math.plugin-handoff.json",
|
|
"advertisementSchemaPath": "schemas/gamecult.eve.plugin_advertisement.v1.schema.json",
|
|
"advertisementPath": "plugins/incubating/tex-math.plugin-advertisement.json",
|
|
"expectedPaths": [
|
|
"plugins/incubating/tex-math.plugin.json",
|
|
"plugins/incubating/tex-math.plugin-abi-fixture.json",
|
|
"plugins/incubating/tex-math.plugin-advertisement.json",
|
|
"plugins/incubating/tex-math.plugin-handoff.json",
|
|
"scripts/run-plugin-handoff-smoke.ps1"
|
|
]
|
|
}
|
|
],
|
|
"splitTargets": [
|
|
{
|
|
"id": "EveFlutter",
|
|
"ownerRepo": "EveFlutter",
|
|
"repoRole": "runtime-target",
|
|
"status": "incubating",
|
|
"runtimes": ["windows-flutter", "linux-flutter", "android-flutter"],
|
|
"requiredRuntimeStatuses": ["active"],
|
|
"requiredFeatures": ["embeddedDocuments"],
|
|
"requiredPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"proofs": [
|
|
{
|
|
"description": "Provider picker consumes provider advertisements without Eve source-layout knowledge.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"flutter/eve_parity/lib/main.dart",
|
|
"flutter/eve_parity/test/parity_smoke_test.dart",
|
|
"tools/parity/run-parity.mjs"
|
|
]
|
|
},
|
|
{
|
|
"description": "Conformance pack can be consumed without depending on Eve's local harness layout.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"scripts/run-eveflutter-conformance-consumer-smoke.ps1",
|
|
"tools/conformance/consume-export.mjs",
|
|
"tools/parity/run-parity.mjs"
|
|
]
|
|
},
|
|
{
|
|
"description": "Flutter lifecycle evidence is declared and smoke-checked for EveFlutter incubation.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"flutter/eve_parity/eveflutter-lifecycle.json",
|
|
"scripts/run-eveflutter-lifecycle-smoke.ps1",
|
|
"scripts/capture-flutter-parity.ps1",
|
|
"scripts/capture-linux-flutter-parity.ps1",
|
|
"scripts/capture-android-flutter-parity.ps1"
|
|
]
|
|
}
|
|
],
|
|
"pendingProofs": [
|
|
"Tagged EveFlutter release, test runner, and capture runners are owned by EveFlutter rather than Eve incubation."
|
|
]
|
|
},
|
|
{
|
|
"id": "EveUnity",
|
|
"ownerRepo": "EveUnity",
|
|
"repoRole": "runtime-target",
|
|
"status": "incubating",
|
|
"runtimes": ["unity-uitoolkit", "unity-scene"],
|
|
"requiredRuntimeStatuses": ["active"],
|
|
"requiredFeatures": ["embeddedDocuments"],
|
|
"requiredPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
}
|
|
],
|
|
"proofs": [
|
|
{
|
|
"description": "Unity lifecycle evidence is declared and smoke-checked for EveUnity incubation.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json",
|
|
"scripts/run-eveunity-lifecycle-smoke.ps1",
|
|
"scripts/run-aetheria-unity-package-smoke.ps1",
|
|
"scripts/run-aetheria-unity-editmode-tests.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "EveUnity split handoff is machine-readable and smoke-checked.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/eveunity-split-handoff.json",
|
|
"scripts/run-eveunity-split-handoff-smoke.ps1",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json"
|
|
]
|
|
},
|
|
{
|
|
"description": "Unity scene split handoff is machine-readable and smoke-checked.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
|
|
"scripts/run-eveunity-scene-split-handoff-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "Unity scene lifecycle contract is machine-readable and smoke-checked.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-unity-scene/eve-runtime-capability.json",
|
|
"scripts/run-eveunity-scene-lifecycle-smoke.ps1",
|
|
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "Unity scene graph projection lowerer exists without claiming provider simulation, plugin projection, 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/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
|
|
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
|
|
]
|
|
}
|
|
],
|
|
"pendingProofs": [
|
|
"Tagged UPM release is cut from EveUnity rather than Eve incubation.",
|
|
"Unity batchmode EditMode runner is owned by EveUnity rather than Eve incubation.",
|
|
"Unity batchmode or editor capture artifact is attached to the runtime conformance report.",
|
|
"Unity scene runtime body graduates to EveUnity outside Aetheria product code.",
|
|
"Unity scene screenshot or frame-capture artifact is attached to the runtime conformance report."
|
|
]
|
|
},
|
|
{
|
|
"id": "EveElectron",
|
|
"ownerRepo": "EveElectron",
|
|
"repoRole": "runtime-target",
|
|
"status": "pending",
|
|
"runtimes": ["electron-shell"],
|
|
"requiredRuntimeStatuses": ["active"],
|
|
"requiredFeatures": ["providerAdvertisements", "surfaceTreeProjection", "embeddedDocuments"],
|
|
"requiredPlugins": [],
|
|
"proofs": [
|
|
{
|
|
"description": "EveElectron split handoff is machine-readable.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-electron/eveelectron-split-handoff.json",
|
|
"scripts/run-eveelectron-split-handoff-smoke.ps1",
|
|
"docs/eve-migration-roadmap.md",
|
|
"docs/parity-testing-harness.md"
|
|
]
|
|
},
|
|
{
|
|
"description": "EveElectron lifecycle contract is machine-readable and smoke-checked.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-electron/eve-runtime-capability.json",
|
|
"scripts/run-eveelectron-lifecycle-smoke.ps1",
|
|
"scripts/run-eveelectron-provider-shell-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "EveElectron provider-shell skeleton selects advertised surfaces, projects Eve surface trees, and emits Eve command intents.",
|
|
"status": "passed",
|
|
"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",
|
|
"scripts/run-eveelectron-provider-shell-smoke.ps1"
|
|
]
|
|
}
|
|
],
|
|
"pendingProofs": [
|
|
"Electron shell runtime body graduates to EveElectron outside Aetheria product code.",
|
|
"Electron renders embedded Eve documents in a packaged Electron window.",
|
|
"Electron capture artifacts are attached to conformance output."
|
|
]
|
|
},
|
|
{
|
|
"id": "EveTui",
|
|
"ownerRepo": "EveTui",
|
|
"repoRole": "runtime-target",
|
|
"status": "pending",
|
|
"runtimes": ["tui"],
|
|
"requiredRuntimeStatuses": ["active"],
|
|
"requiredFeatures": ["providerAdvertisements", "embeddedDocuments", "commandTransport"],
|
|
"requiredPlugins": [],
|
|
"proofs": [
|
|
{
|
|
"description": "EveTui split handoff is machine-readable.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-tui/evetui-split-handoff.json",
|
|
"scripts/run-evetui-split-handoff-smoke.ps1",
|
|
"docs/eve-migration-roadmap.md",
|
|
"docs/parity-testing-harness.md"
|
|
]
|
|
},
|
|
{
|
|
"description": "EveTui lifecycle contract is machine-readable and smoke-checked.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-tui/eve-runtime-capability.json",
|
|
"scripts/run-evetui-lifecycle-smoke.ps1",
|
|
"scripts/run-evetui-provider-shell-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "EveTui provider-shell skeleton selects advertised surfaces, lowers Eve surface trees into terminal grids, and emits Eve command intents.",
|
|
"status": "passed",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-tui/package.json",
|
|
"runtimes/incubating/eve-tui/src/eve-tui-shell.mjs",
|
|
"runtimes/incubating/eve-tui/test/eve-tui-shell.test.mjs",
|
|
"scripts/run-evetui-provider-shell-smoke.ps1"
|
|
]
|
|
}
|
|
],
|
|
"pendingProofs": [
|
|
"TUI runtime body graduates to EveTui outside provider product code.",
|
|
"TUI terminal transcript or cell-grid captures are attached to conformance output."
|
|
]
|
|
}
|
|
],
|
|
"runtimes": [
|
|
{
|
|
"id": "electron-shell",
|
|
"title": "Electron shell",
|
|
"kind": "pending",
|
|
"ownerRepo": "EveElectron",
|
|
"repoRole": "runtime-target",
|
|
"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.",
|
|
"capabilityManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"manifestPath": "runtimes/incubating/eve-electron/eve-runtime-capability.json"
|
|
},
|
|
"splitHandoffPath": "runtimes/incubating/eve-electron/eveelectron-split-handoff.json",
|
|
"requiredFixtures": ["embedded-surface", "aetheria-world"],
|
|
"pluginFixtures": [],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "surfaceTreeProjection"],
|
|
"supportedPlugins": [],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"reason": "Electron provider-shell skeleton exists, but no Sai projection adapter exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"reason": "Electron provider-shell skeleton exists, but no Norn graph projection adapter exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "Electron provider-shell skeleton exists, but no TeX projection adapter exists in this runtime."
|
|
}
|
|
],
|
|
"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/aetheria.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedPaths": [
|
|
"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",
|
|
"runtimes/incubating/eve-electron/eve-runtime-capability.json",
|
|
"scripts/run-eveelectron-lifecycle-smoke.ps1",
|
|
"scripts/run-eveelectron-provider-shell-smoke.ps1",
|
|
"scripts/run-eveelectron-release-contract-smoke.ps1",
|
|
"scripts/run-eveelectron-capture-contract-smoke.ps1",
|
|
"tools/eveelectron/eveelectron-release-contract.mjs",
|
|
"tools/eveelectron/eveelectron-release-contract.test.mjs",
|
|
"tools/eveelectron/eveelectron-capture-contract.mjs",
|
|
"tools/eveelectron/eveelectron-capture-contract.test.mjs"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "runtimes/incubating/eve-electron/src/eve-electron-shell.mjs",
|
|
"contains": ["EveElectronShell", "selectSurface", "lowerSurface", "createCommandIntent", "normalizeSurfaceDocument", "buildShellNode", "shellElementKind", "worldInteraction", "commandBoundary", "receiptSchema", "electron-shell"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-electron/test/eve-electron-shell.test.mjs",
|
|
"contains": ["selects the active advertised provider surface", "lowers provider surface trees into an Electron shell projection", "rejects surface documents that do not match the advertised target", "command intents carry provider-advertised boundaries", "aetheria.daemon.commands", "aetheria.eve_command_acceptance_status.v1"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-capture-contract.mjs",
|
|
"contains": ["buildElectronCaptureRequest", "gamecult.eve.runtime_capture_request.v1", "loweringTargets", "artifactPattern", "writeCaptureRequest"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-capture-contract.test.mjs",
|
|
"contains": ["builds Electron shell capture request from provider advertisement", "rejects capture request when the surface does not advertise Electron shell", "electron-shell", "aetheria.daemon.commands"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-release-contract.mjs",
|
|
"contains": ["buildElectronReleaseRequest", "gamecult.eve.runtime_release_request.v1", "eveelectron-release", "writeReleaseRequest"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-release-contract.test.mjs",
|
|
"contains": ["builds EveElectron release request from package manifest", "eveelectron-v0.1.0", "artifacts/eveelectron-release/0.1.0/eve-electron-0.1.0.zip"]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "missing",
|
|
"note": "Electron capture is a split blocker until EveElectron attaches provider-agnostic shell window artifacts."
|
|
}
|
|
},
|
|
{
|
|
"id": "tui",
|
|
"title": "Compact TUI",
|
|
"kind": "pending",
|
|
"ownerRepo": "EveTui",
|
|
"repoRole": "runtime-target",
|
|
"splitTarget": "EveTui",
|
|
"graduationTrigger": "Split when TUI has a provider-agnostic terminal/grid lowerer, provider advertisement consumption, command transport, terminal capability manifest, and transcript/cell-grid capture evidence.",
|
|
"capabilityManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"manifestPath": "runtimes/incubating/eve-tui/eve-runtime-capability.json"
|
|
},
|
|
"splitHandoffPath": "runtimes/incubating/eve-tui/evetui-split-handoff.json",
|
|
"requiredFixtures": ["embedded-surface", "aetheria-world"],
|
|
"pluginFixtures": [],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "terminalGridSummary", "terminalGridLowering"],
|
|
"supportedPlugins": [],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"reason": "TUI provider-shell skeleton exists, but no Sai terminal projection adapter exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"reason": "TUI provider-shell skeleton exists, but no Norn graph terminal fallback exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "TUI provider-shell skeleton exists, but no TeX terminal fallback exists in this runtime."
|
|
}
|
|
],
|
|
"worldSurfaceLowering": [
|
|
{
|
|
"targetId": "tui",
|
|
"surfaceKinds": ["interactive-world", "interactive-world-editor"],
|
|
"projectionKinds": ["provider-authored-world-surface", "provider-authored-world-editor-surface"],
|
|
"supportLevel": "terminal-grid-command-surface",
|
|
"ownership": "runtime-lowers-provider-world-surface-without-owning-world-state",
|
|
"lossiness": "terminal-grid-summary-only",
|
|
"evidencePaths": [
|
|
"runtimes/incubating/eve-tui/src/eve-tui-shell.mjs",
|
|
"runtimes/incubating/eve-tui/test/eve-tui-shell.test.mjs",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedPaths": [
|
|
"runtimes/incubating/eve-tui/package.json",
|
|
"runtimes/incubating/eve-tui/src/eve-tui-shell.mjs",
|
|
"runtimes/incubating/eve-tui/test/eve-tui-shell.test.mjs",
|
|
"runtimes/incubating/eve-tui/evetui-split-handoff.json",
|
|
"runtimes/incubating/eve-tui/eve-runtime-capability.json",
|
|
"scripts/run-evetui-split-handoff-smoke.ps1",
|
|
"scripts/run-evetui-lifecycle-smoke.ps1",
|
|
"scripts/run-evetui-provider-shell-smoke.ps1",
|
|
"scripts/run-evetui-capture-contract-smoke.ps1",
|
|
"scripts/run-evetui-release-contract-smoke.ps1",
|
|
"tools/evetui/evetui-capture-contract.mjs",
|
|
"tools/evetui/evetui-capture-contract.test.mjs",
|
|
"tools/evetui/evetui-release-contract.mjs",
|
|
"tools/evetui/evetui-release-contract.test.mjs"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "runtimes/incubating/eve-tui/src/eve-tui-shell.mjs",
|
|
"contains": ["EveTuiShell", "selectSurface", "lowerSurface", "normalizeSurfaceDocument", "buildComponentLines", "terminalElementKind", "createCommandIntent", "renderSummary", "gamecult.eve.tui_grid.v1", "commandBoundary", "receiptSchema"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-tui/test/eve-tui-shell.test.mjs",
|
|
"contains": ["selects advertised provider surfaces", "command intents carry provider-advertised boundaries", "summary grid is explicitly lossy", "lowers provider surface trees into a terminal grid", "rejects surface documents that do not match the advertised TUI target", "aetheria.daemon.commands"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-capture-contract.mjs",
|
|
"contains": ["buildTuiCaptureRequest", "gamecult.eve.runtime_capture_request.v1", "ansi-transcript-or-json-grid", "loweringTargets", "writeCaptureRequest"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-capture-contract.test.mjs",
|
|
"contains": ["builds TUI capture request from provider advertisement", "rejects capture request when the surface does not advertise TUI", "artifacts/evetui-capture/smoke/tui-transcript.ansi"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-release-contract.mjs",
|
|
"contains": ["buildTuiReleaseRequest", "gamecult.eve.runtime_release_request.v1", "evetui-release", "writeReleaseRequest"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-release-contract.test.mjs",
|
|
"contains": ["builds EveTui release request from package manifest", "evetui-v0.1.0", "artifacts/evetui-release/0.1.0/eve-tui-0.1.0.tgz"]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "missing",
|
|
"note": "TUI transcript or cell-grid capture is a split blocker until EveTui attaches durable terminal artifacts."
|
|
}
|
|
},
|
|
{
|
|
"id": "unity-scene",
|
|
"title": "Unity / Scene",
|
|
"kind": "pending",
|
|
"ownerRepo": "EveUnity",
|
|
"repoRole": "runtime-target",
|
|
"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.",
|
|
"capabilityManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"manifestPath": "runtimes/incubating/eve-unity-scene/eve-runtime-capability.json"
|
|
},
|
|
"splitHandoffPath": "runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
|
|
"requiredFixtures": ["aetheria-world"],
|
|
"pluginFixtures": [],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "sceneGraphProjection"],
|
|
"supportedPlugins": [],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"reason": "Unity scene graph projection exists, but no Sai VN scene projection adapter for sidecar-advertised capabilities exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"reason": "Unity scene graph projection exists, but no Norn graph scene-space or UI overlay adapter exists in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "Unity scene graph projection exists, but no TeX scene-space or UI overlay adapter exists in this runtime."
|
|
}
|
|
],
|
|
"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/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedPaths": [
|
|
"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",
|
|
"runtimes/incubating/eve-unity-scene/eve-runtime-capability.json",
|
|
"runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json",
|
|
"scripts/run-eveunity-scene-lifecycle-smoke.ps1",
|
|
"scripts/run-eveunity-scene-release-contract-smoke.ps1",
|
|
"scripts/run-eveunity-scene-provider-shell-smoke.ps1",
|
|
"scripts/run-eveunity-scene-capture-contract-smoke.ps1",
|
|
"tools/eveunity/eveunity-release-contract.mjs",
|
|
"tools/eveunity/eveunity-release-contract.test.mjs",
|
|
"tools/eveunity/eveunity-capture-contract.mjs",
|
|
"tools/eveunity/eveunity-capture-contract.test.mjs"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs",
|
|
"contains": ["EveUnitySceneSurfaceLowerer", "EveUnitySceneProviderSurfaceAdvertisement", "WorldInteraction", "CommandBoundary", "ReceiptSchema", "EveSurfaceCommandRequest", "BuildSceneGraph", "EveUnitySceneNode", "SceneObjectKind", "unity-scene"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
|
|
"contains": ["LowerCarriesProviderAdvertisedWorldBoundary", "LowerBuildsProviderAgnosticSceneGraphFromSurfaceTree", "CommandIntentCarriesAdvertisedBoundaryWithoutOwningReceipts", "world-projection-node", "plugin-placeholder", "aetheria.daemon.commands", "aetheria.eve_command_acceptance_status.v1"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-capture-contract.test.mjs",
|
|
"contains": ["builds Unity scene capture request from provider advertisement", "unity-scene", "artifacts/eveunity-scene-capture/smoke/unity-scene.png"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-release-contract.test.mjs",
|
|
"contains": ["builds EveUnity scene UPM release request from package manifest", "eveunity-scene-v0.1.0", "artifacts/eveunity-scene-release/0.1.0/org.gamecult.eve.unity-scene-0.1.0.tgz"]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "missing",
|
|
"note": "Unity scene capture is a split blocker until EveUnity attaches provider-agnostic scene frame artifacts."
|
|
}
|
|
},
|
|
{
|
|
"id": "web",
|
|
"title": "Web reference",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "core",
|
|
"splitTarget": "Eve",
|
|
"graduationTrigger": "Stay in Eve while it is the behavior oracle; split only if it becomes a deployable runtime product.",
|
|
"capabilityManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"manifestPath": "web/eve-runtime-capability.json"
|
|
},
|
|
"semanticHarness": true,
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments", "providerAdvertisements", "stateBindings", "styleTokens", "authorityWitnesses"],
|
|
"localProviderCatalog": {
|
|
"path": "web/local-provider-catalog.json",
|
|
"requiredProviders": ["aetheria", "repixelizer", "gamecult.home.vn"],
|
|
"requiredAdvertisements": [
|
|
"web/fixtures/aetheria.provider-advertisement.json",
|
|
"web/fixtures/repixelizer.provider-advertisement.json",
|
|
"web/fixtures/sai-vn.provider-advertisement.json"
|
|
]
|
|
},
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"worldSurfaceLowering": [
|
|
{
|
|
"targetId": "web-reference",
|
|
"surfaceKinds": ["interactive-world", "interactive-world-editor"],
|
|
"projectionKinds": ["provider-authored-world-surface", "provider-authored-world-editor-surface"],
|
|
"supportLevel": "reference-dom-canvas-command-boundary",
|
|
"ownership": "runtime-lowers-provider-world-surface-without-owning-world-state",
|
|
"evidencePaths": [
|
|
"web/surface.js",
|
|
"packages/eve-browser-lowering/src/index.ts",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "web/surface.js",
|
|
"contains": ["loadLocalProviderCatalog", "loadProviderAdvertisement", "publishCommandIntent", "browser.reference"]
|
|
},
|
|
{
|
|
"path": "web/local-provider-catalog.json",
|
|
"contains": ["aetheria.provider-advertisement.json", "repixelizer.provider-advertisement.json", "sai-vn.provider-advertisement.json"]
|
|
},
|
|
{
|
|
"path": "packages/eve-browser-lowering/src/index.ts",
|
|
"contains": ["surface.slot", "embeddedDocuments", "cultui-embedded-slot", "createEveCommandIntent", "resolveComponentCommandId", "localAdvertisement", "activeSurfaceId"]
|
|
}
|
|
],
|
|
"commandTransportSmoke": {
|
|
"schema": "gamecult.eve.command.v1",
|
|
"expectedPaths": ["packages/eve-browser-lowering/src/index.ts", "packages/eve-browser-lowering/test/browser-lowering.test.mjs", "web/surface.js"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "packages/eve-browser-lowering/src/index.ts",
|
|
"contains": ["EveCommandIntent", "createEveCommandIntent", "schema: \"gamecult.eve.command.v1\"", "clientId", "commandBoundary", "receiptSchema", "activeSurfaceId"]
|
|
},
|
|
{
|
|
"path": "packages/eve-browser-lowering/test/browser-lowering.test.mjs",
|
|
"contains": ["activeSurfaceId", "aetheria.daemon.editor", "aetheria.daemon.editor.commands", "component.fallback.boundary"]
|
|
},
|
|
{
|
|
"path": "web/surface.js",
|
|
"contains": ["publishCommandIntent", "/hermodr/commands/eve", "createEveCommandIntent", "browser.reference", "activeSurfaceId"]
|
|
}
|
|
]
|
|
},
|
|
"lifecycle": {
|
|
"release": {
|
|
"ownerRepo": "Eve",
|
|
"status": "reference-oracle-in-core",
|
|
"evidencePaths": [
|
|
"web/index.html",
|
|
"web/surface.js",
|
|
"packages/eve-browser-lowering/src/index.ts"
|
|
],
|
|
"pendingProofs": [
|
|
"Split to EveWeb only if the browser reference gains independent deployment and release lifecycle."
|
|
]
|
|
},
|
|
"test": {
|
|
"ownerRepo": "Eve",
|
|
"status": "node-tests-and-parity-harness",
|
|
"command": "node --test web/eve-dsl.test.mjs && npm --prefix packages/eve-browser-lowering test && powershell -ExecutionPolicy Bypass -File .\\scripts\\run-parity-harness.ps1",
|
|
"evidencePaths": [
|
|
"web/eve-dsl.test.mjs",
|
|
"packages/eve-browser-lowering/test/browser-lowering.test.mjs",
|
|
"tools/parity/parity-manifest.json",
|
|
"scripts/run-parity-harness.ps1"
|
|
],
|
|
"pendingProofs": []
|
|
},
|
|
"capture": {
|
|
"ownerRepo": "Eve",
|
|
"status": "chrome-headless",
|
|
"evidencePaths": [
|
|
"scripts/capture-web-reference.ps1",
|
|
"scripts/run-parity-smoke.ps1",
|
|
"tools/parity/render-contact-sheet.py"
|
|
],
|
|
"pendingProofs": []
|
|
}
|
|
},
|
|
"capture": {
|
|
"status": "chrome-headless",
|
|
"note": "Chrome headless captures phone, tablet, and desktop PNGs through the provider query parameter."
|
|
}
|
|
},
|
|
{
|
|
"id": "windows-flutter",
|
|
"title": "Windows / Flutter",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveFlutter",
|
|
"graduationTrigger": "Split when Flutter has provider picker, command transport, plugin projection adapters, and its own build/release lifecycle.",
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"expectedPaths": ["flutter/eve_parity/lib/main.dart", "scripts/capture-flutter-parity.ps1"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["embeddedDocuments", "surface.slot", "EveEmbeddedDocumentSlot", "EveProviderCatalog", "EveProviderPicker"]
|
|
}
|
|
],
|
|
"commandTransportSmoke": {
|
|
"schema": "gamecult.eve.command.v1",
|
|
"expectedPaths": ["flutter/eve_parity/lib/main.dart", "flutter/eve_parity/test/parity_smoke_test.dart"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["EveCommandIntent", "createEveCommandIntent", "resolveComponentCommandId", "commandSink", "gamecult.eve.command.v1", "flutter-parity"]
|
|
},
|
|
{
|
|
"path": "flutter/eve_parity/test/parity_smoke_test.dart",
|
|
"contains": ["emits gamecult Eve command intent", "aetheria.daemon.commands", "aetheria.daemon.focus"]
|
|
}
|
|
]
|
|
},
|
|
"capture": {
|
|
"status": "golden",
|
|
"note": "Uses the Flutter parity golden smoke on the Windows host."
|
|
}
|
|
},
|
|
{
|
|
"id": "linux-flutter",
|
|
"title": "Linux / Flutter",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveFlutter",
|
|
"graduationTrigger": "Split with EveFlutter when Linux capture and runner health become runtime-owned.",
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"expectedPaths": ["flutter/eve_parity/linux", "scripts/capture-flutter-parity.ps1"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["embeddedDocuments", "surface.slot", "EveEmbeddedDocumentSlot", "EveProviderCatalog", "EveProviderPicker"]
|
|
}
|
|
],
|
|
"commandTransportSmoke": {
|
|
"schema": "gamecult.eve.command.v1",
|
|
"expectedPaths": ["flutter/eve_parity/lib/main.dart", "flutter/eve_parity/test/parity_smoke_test.dart"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["EveCommandIntent", "createEveCommandIntent", "resolveComponentCommandId", "commandSink", "gamecult.eve.command.v1", "flutter-parity"]
|
|
},
|
|
{
|
|
"path": "flutter/eve_parity/test/parity_smoke_test.dart",
|
|
"contains": ["emits gamecult Eve command intent", "aetheria.daemon.commands", "aetheria.daemon.focus"]
|
|
}
|
|
]
|
|
},
|
|
"capture": {
|
|
"status": "ssh-golden",
|
|
"note": "Runs the Flutter parity golden smoke on Nightwing over SSH and pulls back phone, tablet, and desktop PNGs."
|
|
}
|
|
},
|
|
{
|
|
"id": "ios-uikit",
|
|
"title": "iOS / UIKit",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveIOS",
|
|
"graduationTrigger": "Split when UIKit renderer has generic surface lowering, sensor edge release flow, and device CI independent of Eve core.",
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"reason": "UIKit smoke proves generic embedded document lowering and capture only; Sai VN projection belongs to EveFlutter/EveUnity or a future EveIOS projection adapter."
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"reason": "UIKit smoke preserves embed.norn as generic Eve structure; Norn graph projection is not implemented in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "UIKit smoke preserves embed.tex as generic Eve structure; TeX projection is not implemented in this runtime."
|
|
}
|
|
],
|
|
"expectedPaths": ["Sources/EVEViewController.mm", "scripts/capture-eve-screenshot.ps1"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "Sources/EVEViewController.mm",
|
|
"contains": ["surface.slot", "embeddedDocuments", "accessibilityIdentifier"]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "ssh-png",
|
|
"note": "SSH capture script foregrounds EveCanvas and requests latest-screenshot.png."
|
|
}
|
|
},
|
|
{
|
|
"id": "android-flutter",
|
|
"title": "Android / Flutter",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveFlutter",
|
|
"graduationTrigger": "Split with EveFlutter when Android APK smoke, provider discovery, command transport, and plugin projection adapters are runtime-owned.",
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"capabilities": ["embed.tex"]
|
|
}
|
|
],
|
|
"expectedPaths": ["flutter/eve_parity/lib/main.dart", "scripts/capture-android-flutter-parity.ps1"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["embeddedDocuments", "surface.slot", "EveEmbeddedDocumentSlot", "EveProviderCatalog", "EveProviderPicker"]
|
|
}
|
|
],
|
|
"commandTransportSmoke": {
|
|
"schema": "gamecult.eve.command.v1",
|
|
"expectedPaths": ["flutter/eve_parity/lib/main.dart", "flutter/eve_parity/test/parity_smoke_test.dart"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "flutter/eve_parity/lib/main.dart",
|
|
"contains": ["EveCommandIntent", "createEveCommandIntent", "resolveComponentCommandId", "commandSink", "gamecult.eve.command.v1", "flutter-parity"]
|
|
},
|
|
{
|
|
"path": "flutter/eve_parity/test/parity_smoke_test.dart",
|
|
"contains": ["emits gamecult Eve command intent", "aetheria.daemon.commands", "aetheria.daemon.focus"]
|
|
}
|
|
]
|
|
},
|
|
"capture": {
|
|
"status": "adb-png",
|
|
"note": "Builds the shared Flutter parity APK, installs it on Periwinkle, and pulls responsive plus physical-panel screencaps through adb."
|
|
}
|
|
},
|
|
{
|
|
"id": "android-kotlin",
|
|
"title": "Android / Kotlin device edge",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveAndroid",
|
|
"graduationTrigger": "Split when Kotlin device edge has generic surface traversal, sensor release flow, and Android-specific CI.",
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["cultmesh-dashboard-documents", "sensor-uplink", "embeddedDocuments"],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"reason": "Kotlin device edge is a lightweight CultMesh/sensor dashboard proof; Sai VN projection belongs to Flutter, Unity, or a future Android projection adapter."
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"reason": "Kotlin device edge preserves embed.norn as generic Eve structure; Norn graph projection is not implemented in this runtime."
|
|
},
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "Kotlin device edge preserves embed.tex as generic Eve structure; TeX projection is not implemented in this runtime."
|
|
}
|
|
],
|
|
"expectedPaths": ["android/app/src/main/java/org/gamecult/eve/MainActivity.kt", "scripts/build-android.ps1"],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "android/app/src/main/java/org/gamecult/eve/MainActivity.kt",
|
|
"contains": ["surface.slot", "embeddedDocuments", "contentDescription"]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "manual",
|
|
"note": "Native Kotlin preserves CultUI embedded document slots in its lightweight dashboard renderer; full responsive GUI capture still belongs to Android Flutter."
|
|
}
|
|
},
|
|
{
|
|
"id": "unity-uitoolkit",
|
|
"title": "Unity / UI Toolkit",
|
|
"kind": "active",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "runtime-incubating",
|
|
"splitTarget": "EveUnity",
|
|
"graduationTrigger": "Split when Unity package has independent UPM release, plugin projection adapter behavior, and Unity test/capture lifecycle.",
|
|
"capabilityManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"manifestPath": "packages/org.gamecult.eve.unity-uitoolkit/eve-runtime-capability.json"
|
|
},
|
|
"requiredFixtures": ["embedded-surface"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"supportedPlugins": [
|
|
{
|
|
"pluginId": "sai.vn",
|
|
"capabilities": ["vn.stage", "story.choose", "story.continue", "story.jump"]
|
|
},
|
|
{
|
|
"pluginId": "norn.graph",
|
|
"capabilities": ["embed.norn"]
|
|
}
|
|
],
|
|
"unsupportedPlugins": [
|
|
{
|
|
"pluginId": "tex.math",
|
|
"reason": "Unity UI Toolkit currently preserves embed.tex as generic Eve structure; no TeX projection adapter exists in this runtime."
|
|
}
|
|
],
|
|
"worldSurfaceLowering": [
|
|
{
|
|
"targetId": "unity-uitoolkit",
|
|
"surfaceKinds": ["interactive-world", "interactive-world-editor"],
|
|
"projectionKinds": ["provider-authored-world-surface", "provider-authored-world-editor-surface"],
|
|
"supportLevel": "ui-toolkit-semantic-command-surface",
|
|
"ownership": "runtime-lowers-provider-world-surface-without-owning-world-state",
|
|
"evidencePaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/EveUiToolkitSurfaceLowerer.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/EveUiToolkitSurfaceLowererTests.cs",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedPaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/EveUiToolkitSurfaceLowerer.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/IEveUiToolkitPluginProjectionAdapter.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/SaiVisualNovelUiToolkitProjectionAdapter.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/NornGraphUiToolkitProjectionAdapter.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/GameCult.Eve.UnityUIToolkit.Tests.asmdef",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/EveUiToolkitSurfaceLowererTests.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/eveunity-split-handoff.json",
|
|
"scripts/run-aetheria-unity-editmode-tests.ps1",
|
|
"scripts/run-eveunity-split-handoff-smoke.ps1"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Runtime/EveUiToolkitSurfaceLowerer.cs",
|
|
"contains": ["LowerEmbeddedDocument(", "EmbeddedDocuments", "eve-embedded-document", "FindPluginProjectionAdapter", "projectionAdapter.Lower"]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Runtime/IEveUiToolkitPluginProjectionAdapter.cs",
|
|
"contains": ["PluginId", "Capabilities", "CanLower", "Lower("]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Runtime/SaiVisualNovelUiToolkitProjectionAdapter.cs",
|
|
"contains": ["sai.vn", "vn.stage", "story.choose", "story.continue", "story.jump", "StoryButton", "EmitStoryCommand", "EveSurfaceCommandRequest", "sai-vn-stage", "sai-vn-dialogue", "sai-vn-actions"]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Runtime/NornGraphUiToolkitProjectionAdapter.cs",
|
|
"contains": ["norn.graph", "embed.norn", "NornGraphUiToolkitProjectionAdapter", "norn-graph", "EmitGraphCommand", "EveSurfaceCommandRequest"]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/EveUiToolkitSurfaceLowererTests.cs",
|
|
"contains": ["FindPluginProjectionAdapter", "SaiStageLowersThroughRuntimeProjectionAdapter", "NornGraphLowersThroughRuntimeProjectionAdapter", "EmbeddedDocumentSlotMountsResolverBackedChildSurface", "eve-plugin-projection"]
|
|
}
|
|
],
|
|
"commandTransportSmoke": {
|
|
"schema": "gamecult.eve.command.v1",
|
|
"expectedPaths": [
|
|
"packages/org.gamecult.eve.surface/Runtime/EveSurfaceDocument.cs",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Runtime/EveUiToolkitSurfaceLowerer.cs"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "packages/org.gamecult.eve.surface/Runtime/EveSurfaceDocument.cs",
|
|
"contains": ["EveSurfaceCommandRequest", "SchemaId", "gamecult.eve.command.v1", "ClientId"]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Runtime/EveUiToolkitSurfaceLowerer.cs",
|
|
"contains": ["commandSink", "EmitCommand", "ResolveOperation", "unity-uitoolkit"]
|
|
}
|
|
]
|
|
},
|
|
"lifecycle": {
|
|
"release": {
|
|
"ownerRepo": "EveUnity",
|
|
"status": "incubating-upm-package",
|
|
"releaseContract": {
|
|
"ownerRepo": "EveUnity",
|
|
"packageName": "org.gamecult.eve.unity-uitoolkit",
|
|
"packageRoot": "packages/org.gamecult.eve.unity-uitoolkit",
|
|
"versionSource": "packages/org.gamecult.eve.unity-uitoolkit/package.json",
|
|
"tagPattern": "eveunity-uitoolkit-v{version}",
|
|
"artifactKind": "upm-package",
|
|
"requestSchema": "gamecult.eve.runtime_release_request.v1",
|
|
"requestBuilder": "tools/eveunity/eveunity-release-contract.mjs",
|
|
"artifactPattern": "artifacts/eveunity-uitoolkit-release/{version}/org.gamecult.eve.unity-uitoolkit-{version}.tgz",
|
|
"publishProof": "Tagged UPM release is created from the EveUnity repo and references this package root."
|
|
},
|
|
"evidencePaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/package.json",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/README.md",
|
|
"tools/eveunity/eveunity-release-contract.mjs",
|
|
"tools/eveunity/eveunity-release-contract.test.mjs",
|
|
"scripts/run-eveunity-release-contract-smoke.ps1",
|
|
"scripts/run-aetheria-unity-package-smoke.ps1"
|
|
],
|
|
"pendingProofs": [
|
|
"Tagged UPM release cut from EveUnity rather than Eve incubation."
|
|
]
|
|
},
|
|
"test": {
|
|
"ownerRepo": "EveUnity",
|
|
"status": "batchmode-editmode-tests-and-consumer-build-smoke",
|
|
"command": "powershell -ExecutionPolicy Bypass -File .\\scripts\\run-aetheria-unity-editmode-tests.ps1",
|
|
"testContract": {
|
|
"ownerRepo": "EveUnity",
|
|
"runnerKind": "unity-editmode-batchmode",
|
|
"runnerScript": "scripts/run-aetheria-unity-editmode-tests.ps1",
|
|
"consumerProject": "E:\\Projects\\Aetheria",
|
|
"unityExeDefault": "C:\\Program Files\\Unity\\Hub\\Editor\\6000.4.2f1\\Editor\\Unity.exe",
|
|
"packageName": "org.gamecult.eve.unity-uitoolkit",
|
|
"testAssembly": "GameCult.Eve.UnityUIToolkit.Tests",
|
|
"testPlatform": "EditMode",
|
|
"resultsArtifact": "artifacts/aetheria-unity-editmode/{stamp}/unity-editmode-results.xml",
|
|
"logArtifact": "artifacts/aetheria-unity-editmode/{stamp}/unity-editmode.log",
|
|
"manifestMutation": "Temporarily adds org.gamecult.eve.unity-uitoolkit to Aetheria Packages/manifest.json testables and restores the manifest after the run."
|
|
},
|
|
"evidencePaths": [
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/GameCult.Eve.UnityUIToolkit.Tests.asmdef",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/EveUiToolkitSurfaceLowererTests.cs",
|
|
"scripts/run-aetheria-unity-editmode-tests.ps1",
|
|
"scripts/run-aetheria-unity-package-smoke.ps1",
|
|
"scripts/run-eveunity-split-handoff-smoke.ps1",
|
|
"packages/org.gamecult.eve.unity-uitoolkit/eveunity-split-handoff.json"
|
|
],
|
|
"pendingProofs": [
|
|
"Unity batchmode EditMode runner is owned by EveUnity rather than Eve incubation."
|
|
]
|
|
},
|
|
"capture": {
|
|
"ownerRepo": "EveUnity",
|
|
"status": "pending-editor-capture",
|
|
"captureContract": {
|
|
"ownerRepo": "EveUnity",
|
|
"runtimeId": "unity-uitoolkit",
|
|
"targetId": "unity-uitoolkit",
|
|
"requestSchema": "gamecult.eve.runtime_capture_request.v1",
|
|
"requestBuilder": "tools/eveunity/eveunity-capture-contract.mjs",
|
|
"advertisementPath": "web/fixtures/aetheria.provider-advertisement.json",
|
|
"captureKind": "unity-editor-or-batchmode-png",
|
|
"artifactKind": "png",
|
|
"artifactPattern": "artifacts/eveunity-uitoolkit-capture/{stamp}/unity-uitoolkit.png",
|
|
"conformanceAttachment": "runtime.captureArtifacts[]",
|
|
"requiredProvider": "aetheria",
|
|
"requiredSurface": "aetheria.daemon.game",
|
|
"authority": "Capture observes runtime projection only; provider state, command acceptance, and receipts stay provider-owned.",
|
|
"publishProof": "Unity editor or batchmode capture artifact is attached to the runtime conformance report from EveUnity."
|
|
},
|
|
"evidencePaths": [
|
|
"tools/eveunity/eveunity-capture-contract.mjs",
|
|
"tools/eveunity/eveunity-capture-contract.test.mjs",
|
|
"scripts/run-eveunity-capture-contract-smoke.ps1",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
],
|
|
"pendingProofs": [
|
|
"Unity batchmode or editor capture artifact attached to the runtime conformance report."
|
|
]
|
|
}
|
|
},
|
|
"capture": {
|
|
"status": "semantic",
|
|
"note": "Unity UI Toolkit lowers embedded document slots through a resolver-backed child surface host."
|
|
}
|
|
},
|
|
{
|
|
"id": "direct2d",
|
|
"title": "Fensalir Direct2D",
|
|
"kind": "pending",
|
|
"ownerRepo": "Fensalir",
|
|
"repoRole": "runtime-external-target",
|
|
"splitTarget": "Fensalir or EveDirect2D if it earns a separate body",
|
|
"graduationTrigger": "Do not graduate until the Eve-to-AquariumUiDocument adapter and Direct2D frame capture exist.",
|
|
"adapterSpike": "external",
|
|
"demotionReason": "Fensalir has an external Aquarium.EveSurface adapter spike and a recorded gamecult.eve.surface.v1 adapter fixture, but Eve still has no Direct2D frame capture or runtime-owned command smoke.",
|
|
"activationCriteria": [
|
|
"Fensalir runs recorded gamecult.eve.surface.v1 fixtures without provider-specific renderer knowledge.",
|
|
"Fensalir emits gamecult.eve.command.v1 intents through the advertised provider command boundary.",
|
|
"Direct2D capture artifacts are produced and attached to the parity report."
|
|
],
|
|
"requiredFixtures": ["fensalir-direct2d"],
|
|
"pluginFixtures": [],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"expectedPaths": ["web/fixtures/fensalir-direct2d-surface.json"],
|
|
"expectedExternalPaths": [
|
|
"E:\\Projects\\Fensalir\\src\\Aquarium.EveSurface\\EveSurfaceRuntime.cs",
|
|
"E:\\Projects\\Fensalir\\docs\\eve-direct2d-client-surface.md"
|
|
],
|
|
"expectedExternalSourceSymbols": [
|
|
{
|
|
"path": "E:\\Projects\\Fensalir\\src\\Aquarium.EveSurface\\EveSurfaceRuntime.cs",
|
|
"contains": [
|
|
"FENSALIR_EVE_BROKER",
|
|
"AquariumUiDocument Ui => ComposeUi()",
|
|
"ReadSurface(root)",
|
|
"EveCompositionElement",
|
|
"DirectWriteOverlay"
|
|
]
|
|
}
|
|
],
|
|
"capture": {
|
|
"status": "missing",
|
|
"note": "External Fensalir adapter spike and recorded surface fixture exist; Eve still needs runtime-owned command smoke and Direct2D frame capture before this runtime can become active."
|
|
}
|
|
}
|
|
]
|
|
}
|