1933 lines
97 KiB
JSON
1933 lines
97 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.plugin_handoff.v1": "schemas/gamecult.eve.plugin_handoff.v1.schema.json",
|
|
"gamecult.eve.runtime_capability.v1": "schemas/gamecult.eve.runtime_capability.v1.schema.json",
|
|
"gamecult.eve.runtime_lifecycle.v1": "schemas/gamecult.eve.runtime_lifecycle.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.web_layout_probe.v1": "schemas/gamecult.eve.web_layout_probe.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",
|
|
"gamecult.eve.local_provider_catalog.v1": "schemas/gamecult.eve.local_provider_catalog.v1.schema.json",
|
|
"gamecult.eve.provider_handoff.v1": "schemas/gamecult.eve.provider_handoff.v1.schema.json",
|
|
"gamecult.eve.conformance_handoff.v1": "schemas/gamecult.eve.conformance_handoff.v1.schema.json",
|
|
"gamecult.eve.electron_shell_projection.v1": "schemas/gamecult.eve.electron_shell_projection.v1.schema.json",
|
|
"gamecult.eve.unity_uitoolkit_projection.v1": "schemas/gamecult.eve.unity_uitoolkit_projection.v1.schema.json",
|
|
"gamecult.eve.unity_scene_projection.v1": "schemas/gamecult.eve.unity_scene_projection.v1.schema.json",
|
|
"gamecult.eve.unity_playable_world_asset_manifest.v1": "schemas/gamecult.eve.unity_playable_world_asset_manifest.v1.schema.json",
|
|
"gamecult.eve.tui_grid.v1": "schemas/gamecult.eve.tui_grid.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"]
|
|
}
|
|
],
|
|
"optionalNestedPlugins": [
|
|
{
|
|
"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": "eve-world-smoke",
|
|
"title": "Generic Interactive World Smoke",
|
|
"pack": "core",
|
|
"ownerRepo": "Eve",
|
|
"surface": {
|
|
"transport": "local-json",
|
|
"path": "web/fixtures/eve-world-smoke-surface.json"
|
|
},
|
|
"metadataPath": "web/fixtures/eve-world-smoke-surface.conformance.json",
|
|
"expect": {
|
|
"providerId": "eve.world-smoke",
|
|
"componentKinds": ["surface", "card", "text", "metric", "field.surface2d", "control.button"],
|
|
"styleTokens": ["colorBackground", "colorPanel", "colorText", "colorMuted", "colorAccent", "fontBody", "fontTitle"],
|
|
"bindings": ["eve.world-smoke.frame", "eve.world-smoke.field"],
|
|
"commandDescriptors": ["eve.world-smoke.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", "gamecult.eve.unity_playable_world_asset_manifest.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"
|
|
]
|
|
},
|
|
{
|
|
"providerId": "eve.world-smoke",
|
|
"title": "Generic Interactive World Smoke",
|
|
"kind": "contract.fixture",
|
|
"ownerRepo": "Eve",
|
|
"repoRole": "core-contract-fixture",
|
|
"graduationTrigger": "Stays in Eve core as the minimal non-product interactive-world control fixture.",
|
|
"schemaPath": "schemas/gamecult.eve.provider_advertisement.v1.schema.json",
|
|
"advertisementPath": "web/fixtures/eve-world-smoke.provider-advertisement.json",
|
|
"scenarioPath": "web/fixtures/eve-world-smoke-scenario.json",
|
|
"requiredFixtures": ["eve-world-smoke"],
|
|
"expectedSchemas": ["gamecult.eve.surface.v1", "gamecult.eve.command.v1", "eve.world_smoke.frame.v1", "eve.world_smoke.command_receipt.v1"],
|
|
"expectedSurfaces": ["eve.world-smoke.surface"],
|
|
"expectedSurfaceKinds": {
|
|
"eve.world-smoke.surface": "interactive-world"
|
|
},
|
|
"expectedCommands": ["eve.world-smoke.commands"],
|
|
"expectedPaths": [
|
|
"web/fixtures/eve-world-smoke-surface.json",
|
|
"web/fixtures/eve-world-smoke-surface.conformance.json",
|
|
"web/fixtures/eve-world-smoke-scenario.json"
|
|
]
|
|
}
|
|
],
|
|
"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-release-artifact-smoke.ps1",
|
|
"scripts/run-eveunity-scene-provider-shell-smoke.ps1"
|
|
]
|
|
},
|
|
{
|
|
"description": "Unity scene graph projection lowerer plus Sai, Norn, and TeX projection adapters exist without claiming provider simulation, plugin 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/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",
|
|
"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 PNG 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 packaged window PNG capture artifacts are attached to conformance output."
|
|
]
|
|
},
|
|
{
|
|
"id": "EveTui",
|
|
"ownerRepo": "EveTui",
|
|
"repoRole": "runtime-target",
|
|
"status": "incubating",
|
|
"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 package release is cut from EveTui rather than Eve incubation.",
|
|
"TUI capture path is owned by EveTui rather than Eve incubation."
|
|
]
|
|
}
|
|
],
|
|
"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", "eve-world-smoke"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "surfaceTreeProjection", "embeddedDocuments", "pluginProjection"],
|
|
"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", "tex.inline", "tex.block"]
|
|
}
|
|
],
|
|
"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"
|
|
]
|
|
}
|
|
],
|
|
"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",
|
|
"scripts/run-eveelectron-capture-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",
|
|
"tools/eveelectron/eveelectron-capture-artifact.mjs",
|
|
"tools/eveelectron/eveelectron-capture-artifact.test.mjs"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "runtimes/incubating/eve-electron/src/eve-electron-shell.mjs",
|
|
"contains": ["EveElectronShell", "selectSurface", "lowerSurface", "createCommandIntent", "normalizeSurfaceDocument", "buildShellNode", "buildPluginProjection", "normalizeEmbeddedDocuments", "embeddedDocuments", "shellElementKind", "sai.vn", "norn.graph", "tex.math", "sidecar-advertised-plugin-abi", "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", "lowers Sai, Norn, and TeX sidecar plugin shells without owning semantics", "embeddedDocuments", "norn.map", "sai-vn-stage-shell", "norn-graph-shell", "tex-math-shell", "optional-nested", "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", "builds Electron shell capture request from a declared generic world provider", "rejects capture request when the surface does not advertise Electron shell", "electron-shell", "aetheria.daemon.commands", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-capture-artifact.mjs",
|
|
"contains": ["buildElectronCaptureArtifact", "EveElectronShell", "gamecult.eve.electron_shell_projection.v1", "json-projection", "writeElectronCaptureArtifact", "request-output"]
|
|
},
|
|
{
|
|
"path": "tools/eveelectron/eveelectron-capture-artifact.test.mjs",
|
|
"contains": ["builds Electron shell projection capture artifact", "builds Electron shell projection capture artifact from a generic world provider", "gamecult.eve.electron_shell_projection.v1", "electron-shell-projection-json", "eve.world-smoke.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": "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"
|
|
},
|
|
{
|
|
"kind": "json-projection",
|
|
"schema": "gamecult.eve.electron_shell_projection.v1",
|
|
"path": "artifacts/eveelectron-capture/latest/eve-world-smoke-electron-shell-projection.json",
|
|
"runtimeId": "electron-shell",
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"sourceSurfacePath": "web/fixtures/eve-world-smoke-surface.json",
|
|
"requestPath": "artifacts/eveelectron-capture/latest/eve-world-smoke-capture-request.json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "tui",
|
|
"title": "Compact TUI",
|
|
"kind": "active",
|
|
"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", "eve-world-smoke"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "terminalGridSummary", "terminalGridLowering", "embeddedDocuments", "pluginProjection"],
|
|
"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", "tex.inline", "tex.block"]
|
|
}
|
|
],
|
|
"unsupportedPlugins": [],
|
|
"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/sai-vn-surface.json",
|
|
"web/fixtures/aetheria.provider-advertisement.json",
|
|
"web/fixtures/eve-world-smoke.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-capture-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-capture-artifact.mjs",
|
|
"tools/evetui/evetui-capture-artifact.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", "buildPluginProjection", "collectPluginProjections", "collectEmbeddedDocumentSlots", "normalizeEmbeddedDocuments", "embeddedDocumentSlots", "pluginProjections", "terminalElementKind", "sai.vn", "norn.graph", "tex.math", "sidecar-advertised-plugin-abi", "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", "lowers Sai, Norn, and TeX plugin surfaces into compact terminal fallbacks", "embeddedDocumentSlots", "pluginProjections", "optional-nested", "norn.map", "sai-vn-terminal-stage-summary", "norn-graph-terminal-outline", "tex-math-terminal-block-source", "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", "artifactKind", "loweringTargets", "writeCaptureRequest"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-capture-contract.test.mjs",
|
|
"contains": ["builds TUI capture request from provider advertisement", "builds TUI capture request from a declared generic world provider", "rejects capture request when the surface does not advertise TUI", "artifacts/evetui-capture/smoke/tui-grid.json", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-capture-artifact.mjs",
|
|
"contains": ["buildTuiCaptureArtifact", "EveTuiShell", "gamecult.eve.tui_grid.v1", "writeTuiCaptureArtifact", "request-output"]
|
|
},
|
|
{
|
|
"path": "tools/evetui/evetui-capture-artifact.test.mjs",
|
|
"contains": ["builds TUI JSON grid capture artifact", "builds TUI JSON grid capture artifact from a generic world provider", "gamecult.eve.tui_grid.v1", "artifacts/evetui-capture/smoke/tui-grid.json", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"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": "json-grid",
|
|
"note": "TUI attaches a provider-advertisement-backed gamecult.eve.tui_grid.v1 JSON capture artifact; packaged runtime ownership remains an EveTui split blocker.",
|
|
"artifacts": [
|
|
{
|
|
"kind": "json-grid",
|
|
"schema": "gamecult.eve.tui_grid.v1",
|
|
"path": "artifacts/evetui-capture/latest/tui-grid.json",
|
|
"providerId": "aetheria",
|
|
"surfaceId": "aetheria.daemon.game",
|
|
"sourceSurfacePath": "web/fixtures/aetheria-world-surface.json",
|
|
"requestPath": "artifacts/evetui-capture/latest/capture-request.json"
|
|
},
|
|
{
|
|
"kind": "json-grid",
|
|
"schema": "gamecult.eve.tui_grid.v1",
|
|
"path": "artifacts/evetui-capture/latest/eve-world-smoke-tui-grid.json",
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"sourceSurfacePath": "web/fixtures/eve-world-smoke-surface.json",
|
|
"requestPath": "artifacts/evetui-capture/latest/eve-world-smoke-capture-request.json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"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", "eve-world-smoke"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["providerAdvertisements", "commandTransport", "providerSurfaceSession", "providerSurfaceSource", "livePlayableWorldClient", "providerCommandReceipts", "providerAssetManifestDocumentSource", "providerAssetManifestSource", "sceneGraphProjection", "playableWorldProjection", "playableWorldScenePresentation", "unityGameObjectSceneSink", "providerAssetManifestResolution", "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-playable-world-scene-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/EveUnitySceneClientSession.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneProviderConnection.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldLiveClient.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldPresenter.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityGameObjectPlayableWorldSceneSink.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldAssetManifest.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",
|
|
"web/fixtures/eve-world-smoke.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/Runtime/EveUnitySceneClientSession.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneProviderConnection.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldLiveClient.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldPresenter.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityGameObjectPlayableWorldSceneSink.cs",
|
|
"runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldAssetManifest.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/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-release-artifact-smoke.ps1",
|
|
"scripts/run-eveunity-scene-provider-shell-smoke.ps1",
|
|
"scripts/run-eveunity-scene-capture-contract-smoke.ps1",
|
|
"scripts/run-eveunity-scene-capture-smoke.ps1",
|
|
"tools/eveunity/eveunity-release-contract.mjs",
|
|
"tools/eveunity/eveunity-release-contract.test.mjs",
|
|
"tools/eveunity/eveunity-release-artifact.mjs",
|
|
"tools/eveunity/eveunity-release-artifact.test.mjs",
|
|
"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"
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneSurfaceLowerer.cs",
|
|
"contains": ["EveUnitySceneSurfaceLowerer", "EveUnitySceneProviderSurfaceAdvertisement", "WorldInteraction", "CommandBoundary", "ReceiptSchema", "EveSurfaceCommandRequest", "BuildSceneGraph", "BuildPlayableWorld", "EveUnityPlayableWorldProjection", "EveUnityPlayableWorldEntity", "BuildEmbeddedDocumentSlots", "BuildPluginProjection", "SaiVisualNovelUnitySceneProjectionAdapter", "TeXMathUnitySceneProjectionAdapter", "EveUnitySceneEmbeddedDocumentSlot", "EveUnityScenePluginProjection", "EveUnitySceneNode", "SceneObjectKind", "playable-world-root", "unity-scene"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneClientSession.cs",
|
|
"contains": ["EveUnitySceneClientSession", "EveUnitySceneProviderSurfaceSnapshot", "ActiveVersion", "Connect", "ApplySnapshot", "CreateMoveIntent", "CreateFocusIntent", "CreateTargetIntent", "CreateActionIntent", "CreatePlayableWorldIntent", "commandId", "targetPosition", "unity-scene"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnitySceneProviderConnection.cs",
|
|
"contains": ["IEveUnitySceneProviderSurfaceSource", "IEveUnitySceneCommandSink", "EveUnitySceneProviderConnection", "SnapshotAvailable", "CurrentSnapshot", "Connect", "Refresh", "SubmitMoveIntent", "SubmitFocusIntent", "SubmitTargetIntent", "SubmitActionIntent", "Disconnect"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldLiveClient.cs",
|
|
"contains": ["EveUnityPlayableWorldLiveClient", "IEveUnitySceneCommandReceiptSource", "EveUnitySceneCommandReceipt", "EveUnitySceneProviderConnection", "EveUnityPlayableWorldPresenter", "ActiveWorld", "LastPresentation", "LastReceipt", "ReceiptAvailable", "Connect", "Refresh", "SubmitMoveIntent", "SubmitFocusIntent", "SubmitTargetIntent", "SubmitActionIntent", "ProjectionUpdated", "ShouldRefreshProviderSurface", "IsProviderOwned", "Disconnect"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldPresenter.cs",
|
|
"contains": ["IEveUnityPlayableWorldSceneSink", "IEveUnityPlayableWorldAssetResolver", "EveUnityPlayableWorldPresenter", "EveUnityPlayableWorldAssetBinding", "EveUnityPlayableWorldPresentation", "EveUnityAssetRefResolver", "ConfigureWorld", "UpsertEntity", "RemoveEntity", "provider-asset-ref", "unity-generated-placeholder"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnityGameObjectPlayableWorldSceneSink.cs",
|
|
"contains": ["EveUnityGameObjectPlayableWorldSceneSink", "IEveUnityGameObjectAssetProvider", "EveUnityResourcesAssetProvider", "EveUnityPlayableWorldEntityMarker", "GameObject", "Transform", "Resources.Load", "PrimitiveType.Capsule", "DestroyImmediate", "localPosition", "localRotation"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/EveUnityPlayableWorldAssetManifest.cs",
|
|
"contains": ["EveUnityPlayableWorldAssetManifest", "IEveUnityPlayableWorldAssetManifestSource", "IEveUnityPlayableWorldAssetManifestDocumentSource", "EveUnityPlayableWorldAssetManifestDocumentSource", "EveUnityPlayableWorldAssetManifestDocument", "EveUnityPlayableWorldAssetManifestDocumentEntry", "FromDocument", "DocumentAvailable", "gamecult.eve.unity_playable_world_asset_manifest.v1", "EveUnityPlayableWorldAssetManifestCache", "EveUnityPlayableWorldAssetManifestEntry", "EveUnityManifestGameObjectAssetProvider", "ManifestAvailable", "GetForWorld", "CreateGameObjectAssetProvider", "ManifestRef", "ResourcesPath", "PrefabKey", "NormalizeResourcesPath", "ResolvePrefab", "Resources.Load"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/SaiVisualNovelUnitySceneProjectionAdapter.cs",
|
|
"contains": ["SaiVisualNovelUnitySceneProjectionAdapter", "sai.vn", "vn.stage", "story.choose", "story.continue", "story.jump", "gamecult.eve.plugin_abi.v1", "sidecar-advertised-plugin-abi", "Sai"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/NornGraphUnitySceneProjectionAdapter.cs",
|
|
"contains": ["NornGraphUnitySceneProjectionAdapter", "norn.graph", "embed.norn", "gamecult.eve.plugin_abi.v1", "sidecar-advertised-plugin-abi", "Norn"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Runtime/TeXMathUnitySceneProjectionAdapter.cs",
|
|
"contains": ["TeXMathUnitySceneProjectionAdapter", "tex.math", "embed.tex", "tex.scene-placement", "gamecult.eve.plugin_abi.v1", "sidecar-advertised-plugin-abi", "EvePlugins"]
|
|
},
|
|
{
|
|
"path": "runtimes/incubating/eve-unity-scene/Tests/Editor/EveUnitySceneSurfaceLowererTests.cs",
|
|
"contains": ["LowerCarriesProviderAdvertisedWorldBoundary", "LowerBuildsProviderAgnosticSceneGraphFromSurfaceTree", "LowerExtractsPlayableArpgWorldFromGenericScene3dSurface", "GenericClientSessionConsumesAetheriaPlayableWorldSnapshotWithoutAetheriaTypes", "GenericProviderConnectionAppliesLiveSnapshotsAndSubmitsCommandsThroughSink", "PlayableWorldPresenterInstantiatesUpdatesAndDespawnsProviderEntities", "LivePlayableWorldClientPresentsProviderSnapshotsAndKeepsCommandsProviderOwned", "LivePlayableWorldClientRefreshesFromProviderSnapshotAfterReceiptWithoutOwningMovement", "AssetManifestMapsProviderAssetRefsToUnityLoadKeysWithoutAetheriaTypes", "AssetManifestCacheTracksPlayableWorldManifestPointerAndLiveUpdates", "AssetManifestDocumentSourceFeedsCacheWithoutChangingSceneLowering", "FakeProviderSurfaceSource", "FakeCommandReceiptSource", "FakeAssetManifestSource", "FakeAssetManifestDocumentSource", "FakeCommandSink", "FakePlayableWorldSceneSink", "SaiVisualNovelLowersThroughRuntimeProjectionAdapterWithoutOwningStoryState", "CommandIntentCarriesAdvertisedBoundaryWithoutOwningReceipts", "pending", "reconciled", "world-projection-node", "playable-world-root", "playable-world-entity", "world-field-3d", "arpg-third-person", "cultmesh://aetheria/assets/manifest", "cultmesh://aetheria/eve/surfaces/aetheria.daemon.game", "aetheria.daemon.move_intent", "sai-vn-scene-stage", "norn-graph-scene-projection", "tex-math-scene-projection", "norn.map", "cultmesh://aetheria/norn/map", "sai.vn", "norn.graph", "tex.math", "sidecar-advertised-plugin-abi", "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", "builds Unity UI Toolkit capture request from a declared generic world provider", "builds Unity scene capture request from a declared generic world provider", "unity-scene", "artifacts/eveunity-scene-capture/smoke/unity-scene.png", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-scene-capture-artifact.mjs",
|
|
"contains": ["buildUnitySceneCaptureArtifact", "buildUnitySceneProjection", "buildPlayableWorld", "gamecult.eve.unity_scene_projection.v1", "unity-scene-projection-json", "writeUnitySceneCaptureArtifact", "request-output"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-scene-capture-artifact.test.mjs",
|
|
"contains": ["builds Unity scene projection capture artifact", "builds Unity scene capture artifact for a generic world provider", "marks Sai required and Norn TeX optional sidecar plugin projections", "playableWorld", "arpg-third-person", "aetheria.daemon.move_intent", "gamecult.eve.unity_scene_projection.v1", "unity-scene-projection-json", "optional-nested", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"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"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-release-artifact.test.mjs",
|
|
"contains": ["plans npm pack for the EveUnity scene UPM artifact", "runtimes/incubating/eve-unity-scene", "org.gamecult.eve.unity-scene-0.1.0.tgz"]
|
|
}
|
|
],
|
|
"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"
|
|
},
|
|
{
|
|
"kind": "json-projection",
|
|
"schema": "gamecult.eve.unity_scene_projection.v1",
|
|
"path": "artifacts/eveunity-scene-capture/latest/eve-world-smoke-unity-scene-projection.json",
|
|
"runtimeId": "unity-scene",
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"sourceSurfacePath": "web/fixtures/eve-world-smoke-surface.json",
|
|
"requestPath": "artifacts/eveunity-scene-capture/latest/eve-world-smoke-capture-request.json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"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", "eve-world-smoke"],
|
|
"pluginFixtures": ["sai-vn"],
|
|
"supportedFeatures": ["embeddedDocuments", "providerAdvertisements", "stateBindings", "styleTokens", "authorityWitnesses"],
|
|
"localProviderCatalog": {
|
|
"path": "web/local-provider-catalog.json",
|
|
"requiredProviders": ["aetheria", "eve.world-smoke", "repixelizer", "gamecult.home.vn"],
|
|
"requiredAdvertisements": [
|
|
"web/fixtures/aetheria.provider-advertisement.json",
|
|
"web/fixtures/eve-world-smoke.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",
|
|
"web/fixtures/eve-world-smoke.provider-advertisement.json"
|
|
]
|
|
}
|
|
],
|
|
"expectedSourceSymbols": [
|
|
{
|
|
"path": "web/surface.js",
|
|
"contains": ["loadLocalProviderCatalog", "loadProviderAdvertisement", "mergeProviderAdvertisement", "publishCommandIntent", "browser.reference"]
|
|
},
|
|
{
|
|
"path": "web/provider-advertisements.mjs",
|
|
"contains": ["mergeProviderAdvertisement", "mergeProviderSurface", "findProviderCatalogEntry"]
|
|
},
|
|
{
|
|
"path": "web/provider-advertisements.test.mjs",
|
|
"contains": ["preserves Sai required and optional nested plugin requirements from advertisement", "merges local fixture transport with advertised Aetheria world interaction", "loads Aetheria Unity playable world asset manifest as provider-authored data", "gamecult.eve.unity_playable_world_asset_manifest.v1", "merges generic world fixture transport with advertised world interaction", "requiresPlugins", "worldInteraction", "optional-nested", "aetheria.daemon.commands", "eve.world-smoke.commands"]
|
|
},
|
|
{
|
|
"path": "web/local-provider-catalog.json",
|
|
"contains": ["aetheria.provider-advertisement.json", "eve-world-smoke.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",
|
|
"web/provider-advertisements.mjs",
|
|
"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",
|
|
"web/provider-advertisements.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.",
|
|
"layoutProbes": [
|
|
{
|
|
"fixtureId": "embedded-surface",
|
|
"providerId": "gamecult.eve.embedded-demo",
|
|
"surfaceId": "gamecult.eve.embedded-demo",
|
|
"schema": "gamecult.eve.web_layout_probe.v1",
|
|
"path": "artifacts/web-reference-layout-probe/latest/embedded-surface.json",
|
|
"runner": "scripts/run-web-reference-layout-probe-smoke.ps1"
|
|
},
|
|
{
|
|
"fixtureId": "sai-vn",
|
|
"providerId": "gamecult.home.vn",
|
|
"surfaceId": "sai.visual_novel.surface",
|
|
"schema": "gamecult.eve.web_layout_probe.v1",
|
|
"path": "artifacts/web-reference-layout-probe/latest/sai-vn.json",
|
|
"runner": "scripts/run-web-reference-layout-probe-smoke.ps1"
|
|
},
|
|
{
|
|
"fixtureId": "eve-world-smoke",
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"schema": "gamecult.eve.web_layout_probe.v1",
|
|
"path": "artifacts/web-reference-layout-probe/latest/eve-world-smoke.json",
|
|
"runner": "scripts/run-web-reference-layout-probe-smoke.ps1"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"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.",
|
|
"lifecycleManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_lifecycle.v1.schema.json",
|
|
"manifestPath": "flutter/eve_parity/eveflutter-lifecycle.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"]
|
|
},
|
|
{
|
|
"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.",
|
|
"lifecycleManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_lifecycle.v1.schema.json",
|
|
"manifestPath": "flutter/eve_parity/eveflutter-lifecycle.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"]
|
|
},
|
|
{
|
|
"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": [],
|
|
"supportedFeatures": ["embeddedDocuments"],
|
|
"unsupportedPlugins": [],
|
|
"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.",
|
|
"lifecycleManifest": {
|
|
"schemaPath": "schemas/gamecult.eve.runtime_lifecycle.v1.schema.json",
|
|
"manifestPath": "flutter/eve_parity/eveflutter-lifecycle.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"]
|
|
},
|
|
{
|
|
"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": [],
|
|
"supportedFeatures": ["cultmesh-dashboard-documents", "sensor-uplink", "embeddedDocuments", "styleTokens"],
|
|
"unsupportedPlugins": [],
|
|
"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", "tokenLabel", "tokenTextSize", "typefaceForToken", "fontBody", "fontTitle", "fontMono"]
|
|
}
|
|
],
|
|
"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", "eve-world-smoke"],
|
|
"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", "tex.inline", "tex.block"]
|
|
}
|
|
],
|
|
"unsupportedPlugins": [],
|
|
"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",
|
|
"web/fixtures/eve-world-smoke.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/Runtime/TeXMathUiToolkitProjectionAdapter.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",
|
|
"scripts/run-eveunity-uitoolkit-capture-smoke.ps1",
|
|
"tools/eveunity/eveunity-uitoolkit-capture-artifact.mjs",
|
|
"tools/eveunity/eveunity-uitoolkit-capture-artifact.test.mjs"
|
|
],
|
|
"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/Runtime/TeXMathUiToolkitProjectionAdapter.cs",
|
|
"contains": ["tex.math", "embed.tex", "TeXMathUiToolkitProjectionAdapter", "tex-math", "tex-math-source-fallback"]
|
|
},
|
|
{
|
|
"path": "packages/org.gamecult.eve.unity-uitoolkit/Tests/Editor/EveUiToolkitSurfaceLowererTests.cs",
|
|
"contains": ["FindPluginProjectionAdapter", "SaiStageLowersThroughRuntimeProjectionAdapter", "NornGraphLowersThroughRuntimeProjectionAdapter", "TeXMathLowersThroughRuntimeProjectionAdapterAsSourceFallback", "EmbeddedDocumentSlotMountsResolverBackedChildSurface", "eve-plugin-projection"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-uitoolkit-capture-artifact.mjs",
|
|
"contains": ["buildUnityUiToolkitCaptureArtifact", "buildUnityUiToolkitProjection", "gamecult.eve.unity_uitoolkit_projection.v1", "unity-uitoolkit-projection-json", "writeUnityUiToolkitCaptureArtifact", "request-output"]
|
|
},
|
|
{
|
|
"path": "tools/eveunity/eveunity-uitoolkit-capture-artifact.test.mjs",
|
|
"contains": ["builds Unity UI Toolkit projection capture artifact", "builds Unity UI Toolkit capture artifact for a generic world provider", "marks Sai required and Norn TeX optional sidecar plugin UI projections", "gamecult.eve.unity_uitoolkit_projection.v1", "unity-uitoolkit-projection-json", "optional-nested", "eve.world-smoke.commands"]
|
|
}
|
|
],
|
|
"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": "upm-package-artifact-smoke",
|
|
"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",
|
|
"artifactBuilder": "tools/eveunity/eveunity-release-artifact.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.",
|
|
"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": [
|
|
"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",
|
|
"tools/eveunity/eveunity-release-artifact.mjs",
|
|
"tools/eveunity/eveunity-release-artifact.test.mjs",
|
|
"scripts/run-eveunity-release-contract-smoke.ps1",
|
|
"scripts/run-eveunity-release-artifact-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.",
|
|
"managedAssemblyDependencies": [
|
|
{
|
|
"assemblyName": "GameCult.Caching.dll",
|
|
"packageId": "GameCult.Caching",
|
|
"packageManager": "nuget",
|
|
"ownerRepo": "CultLib",
|
|
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
|
|
"dependencyContract": {
|
|
"sourceAuthority": "CultLib",
|
|
"packageSource": "nuget",
|
|
"packageId": "GameCult.Caching",
|
|
"assemblyName": "GameCult.Caching.dll",
|
|
"versionPolicy": "CultLib-owned package version stream.",
|
|
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
|
|
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
|
|
}
|
|
},
|
|
{
|
|
"assemblyName": "GameCult.Mesh.dll",
|
|
"packageId": "GameCult.Mesh",
|
|
"packageManager": "nuget",
|
|
"ownerRepo": "CultLib",
|
|
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
|
|
"dependencyContract": {
|
|
"sourceAuthority": "CultLib",
|
|
"packageSource": "nuget",
|
|
"packageId": "GameCult.Mesh",
|
|
"assemblyName": "GameCult.Mesh.dll",
|
|
"versionPolicy": "CultLib-owned package version stream.",
|
|
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
|
|
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
|
|
}
|
|
},
|
|
{
|
|
"assemblyName": "MessagePack.Annotations.dll",
|
|
"packageId": "MessagePack.Annotations",
|
|
"packageManager": "nuget",
|
|
"ownerRepo": "CultLib",
|
|
"resolutionMode": "Unity precompiled reference during EveUnity incubation.",
|
|
"dependencyContract": {
|
|
"sourceAuthority": "CultLib",
|
|
"packageSource": "nuget",
|
|
"packageId": "MessagePack.Annotations",
|
|
"assemblyName": "MessagePack.Annotations.dll",
|
|
"versionPolicy": "CultLib-owned transitive package version stream.",
|
|
"unityResolution": "EveUnity consumes this as a Unity precompiled reference during incubation.",
|
|
"handoffRequirement": "EveUnity split must resolve this through CultLib's NuGet/package feed or a documented Unity import without vendoring CultLib ownership into Eve."
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"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",
|
|
"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 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",
|
|
"tools/eveunity/eveunity-uitoolkit-capture-artifact.mjs",
|
|
"tools/eveunity/eveunity-uitoolkit-capture-artifact.test.mjs",
|
|
"scripts/run-eveunity-uitoolkit-capture-smoke.ps1",
|
|
"web/fixtures/aetheria.provider-advertisement.json"
|
|
],
|
|
"pendingProofs": [
|
|
"Unity batchmode or editor capture artifact attached to the runtime conformance report."
|
|
]
|
|
}
|
|
},
|
|
"capture": {
|
|
"status": "json-projection",
|
|
"note": "Unity UI Toolkit attaches a provider-advertisement-backed gamecult.eve.unity_uitoolkit_projection.v1 JSON projection artifact; Unity editor or batchmode PNG capture remains an EveUnity split blocker.",
|
|
"artifacts": [
|
|
{
|
|
"kind": "json-projection",
|
|
"schema": "gamecult.eve.unity_uitoolkit_projection.v1",
|
|
"path": "artifacts/eveunity-uitoolkit-capture/latest/unity-uitoolkit-projection.json",
|
|
"runtimeId": "unity-uitoolkit",
|
|
"providerId": "aetheria",
|
|
"surfaceId": "aetheria.daemon.game",
|
|
"sourceSurfacePath": "web/fixtures/aetheria-world-surface.json",
|
|
"requestPath": "artifacts/eveunity-uitoolkit-capture/latest/capture-request.json"
|
|
},
|
|
{
|
|
"kind": "json-projection",
|
|
"schema": "gamecult.eve.unity_uitoolkit_projection.v1",
|
|
"path": "artifacts/eveunity-uitoolkit-capture/latest/eve-world-smoke-unity-uitoolkit-projection.json",
|
|
"runtimeId": "unity-uitoolkit",
|
|
"providerId": "eve.world-smoke",
|
|
"surfaceId": "eve.world-smoke.surface",
|
|
"sourceSurfacePath": "web/fixtures/eve-world-smoke-surface.json",
|
|
"requestPath": "artifacts/eveunity-uitoolkit-capture/latest/eve-world-smoke-capture-request.json"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"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."
|
|
}
|
|
}
|
|
]
|
|
}
|