Add generic world surface control fixture
This commit is contained in:
parent
5bf4d0f665
commit
071c5aef76
11 changed files with 330 additions and 6 deletions
|
|
@ -994,6 +994,14 @@ Recently cut:
|
|||
incubation resolution, and the EveUnity split handoff requirement. The
|
||||
runtime capability schema, parity comparator, lifecycle smoke, and
|
||||
runtime-owner conformance smoke all verify that boundary.
|
||||
- Eve now has a non-Aetheria interactive world control fixture at
|
||||
`web/fixtures/eve-world-smoke-surface.json` with an advertisement at
|
||||
`web/fixtures/eve-world-smoke.provider-advertisement.json`. The local
|
||||
provider catalog, web advertisement merge test, web layout probe, generic
|
||||
conformance consumer, and runtime-owner consumer all assert that
|
||||
`web-reference`, `unity-uitoolkit`, `unity-scene`, `electron-shell`, and
|
||||
`tui` lower the same provider-owned world/command boundary without importing
|
||||
Aetheria product state.
|
||||
- Sai, Norn, and TeX now have plugin ABI fixtures for describe, validate,
|
||||
project, lower, measure, and apply behavior. The parity harness validates
|
||||
those fixtures against plugin manifests, so Eve proves the ABI shape without
|
||||
|
|
|
|||
|
|
@ -52,16 +52,27 @@ try {
|
|||
--expect-capability-gap runtime:Fensalir:direct2d:capture:missing `
|
||||
--expect-local-provider-catalog web:valid:local-provider-catalog.json `
|
||||
--expect-local-provider-catalog-provider web:aetheria `
|
||||
--expect-local-provider-catalog-provider web:eve.world-smoke `
|
||||
--expect-local-provider-catalog-provider web:repixelizer `
|
||||
--expect-local-provider-catalog-provider web:gamecult.home.vn `
|
||||
--expect-local-provider-catalog-advertisement web:aetheria.provider-advertisement.json `
|
||||
--expect-local-provider-catalog-advertisement web:eve-world-smoke.provider-advertisement.json `
|
||||
--expect-local-provider-catalog-advertisement web:repixelizer.provider-advertisement.json `
|
||||
--expect-local-provider-catalog-advertisement web:sai-vn.provider-advertisement.json `
|
||||
--expect-interactive-world-surface eve.world-smoke:eve.world-smoke.surface:web-reference:Eve `
|
||||
--expect-interactive-world-surface eve.world-smoke:eve.world-smoke.surface:unity-scene:Eve `
|
||||
--expect-interactive-world-surface eve.world-smoke:eve.world-smoke.surface:electron-shell:Eve `
|
||||
--expect-interactive-world-surface eve.world-smoke:eve.world-smoke.surface:tui:Eve `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.game:web-reference:claimed:Eve:web `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.game:unity-uitoolkit:claimed:EveUnity:unity-uitoolkit `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.game:unity-scene:claimed:EveUnity:unity-scene `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.game:electron-shell:claimed:EveElectron:electron-shell `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.game:tui:claimed:EveTui:tui `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:web-reference:claimed:Eve:web `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:unity-uitoolkit:claimed:EveUnity:unity-uitoolkit `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:unity-scene:claimed:EveUnity:unity-scene `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:electron-shell:claimed:EveElectron:electron-shell `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:tui:claimed:EveTui:tui `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.editor:electron-shell:claimed:EveElectron:electron-shell `
|
||||
--expect-world-lowering-coverage aetheria:aetheria.daemon.editor:tui:claimed:EveTui:tui `
|
||||
--expect-command-boundary-coverage aetheria:aetheria.daemon.game:web-reference:covered:Eve:web `
|
||||
|
|
@ -69,6 +80,11 @@ try {
|
|||
--expect-command-boundary-coverage aetheria:aetheria.daemon.game:unity-scene:covered:EveUnity:unity-scene `
|
||||
--expect-command-boundary-coverage aetheria:aetheria.daemon.game:electron-shell:covered:EveElectron:electron-shell `
|
||||
--expect-command-boundary-coverage aetheria:aetheria.daemon.game:tui:covered:EveTui:tui `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:web-reference:covered:Eve:web `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:unity-uitoolkit:covered:EveUnity:unity-uitoolkit `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:unity-scene:covered:EveUnity:unity-scene `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:electron-shell:covered:EveElectron:electron-shell `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:tui:covered:EveTui:tui `
|
||||
--expect-command-boundary-coverage aetheria:aetheria.daemon.editor:electron-shell:covered:EveElectron:electron-shell `
|
||||
--expect-command-boundary-coverage aetheria:aetheria.daemon.editor:tui:covered:EveTui:tui `
|
||||
--expect-screenshot-metric web:embedded-surface:structure:pass `
|
||||
|
|
@ -78,6 +94,10 @@ try {
|
|||
--expect-screenshot-metric web:sai-vn:structure:pass `
|
||||
--expect-screenshot-metric web:sai-vn:color-tokens:pass `
|
||||
--expect-screenshot-metric web:sai-vn:bounding-boxes:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:structure:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:color-tokens:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:text-presence:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:bounding-boxes:pass `
|
||||
--expect-screenshot-metric electron-shell:aetheria-world:bounding-boxes:pending-capture `
|
||||
--expect-runtime-capture-probe unity-uitoolkit:semantic-artifact-present-capture-pending:png:EveUnity `
|
||||
--expect-runtime-capture-probe unity-scene:semantic-artifact-present-capture-pending:png:EveUnity `
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@ try {
|
|||
-OutputPath "artifacts\web-reference-layout-probe\latest\sai-vn.json" `
|
||||
-Port 8893 `
|
||||
-SkipBuild
|
||||
& (Join-Path $PSScriptRoot "run-web-reference-layout-probe-smoke.ps1") `
|
||||
-ProviderId "eve.world-smoke" `
|
||||
-FixtureId "eve-world-smoke" `
|
||||
-OutputPath "artifacts\web-reference-layout-probe\latest\eve-world-smoke.json" `
|
||||
-Port 8894 `
|
||||
-SkipBuild
|
||||
& (Join-Path $PSScriptRoot "run-eveunity-uitoolkit-capture-smoke.ps1")
|
||||
& (Join-Path $PSScriptRoot "run-evetui-capture-smoke.ps1")
|
||||
node .\tools\parity\run-parity.mjs
|
||||
|
|
|
|||
|
|
@ -93,6 +93,16 @@ node $consumerScript $consumerExport `
|
|||
--expect-runtime-world-target tui:tui `
|
||||
--expect-runtime-world-field tui:tui:supportLevel:terminal-grid-command-surface `
|
||||
--expect-runtime-world-field tui:tui:ownership:runtime-lowers-provider-world-surface-without-owning-world-state `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:web-reference:claimed:Eve:web `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:unity-uitoolkit:claimed:EveUnity:unity-uitoolkit `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:unity-scene:claimed:EveUnity:unity-scene `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:electron-shell:claimed:EveElectron:electron-shell `
|
||||
--expect-world-lowering-coverage eve.world-smoke:eve.world-smoke.surface:tui:claimed:EveTui:tui `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:web-reference:covered:Eve:web `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:unity-uitoolkit:covered:EveUnity:unity-uitoolkit `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:unity-scene:covered:EveUnity:unity-scene `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:electron-shell:covered:EveElectron:electron-shell `
|
||||
--expect-command-boundary-coverage eve.world-smoke:eve.world-smoke.surface:tui:covered:EveTui:tui `
|
||||
--expect-runtime-plugin-projection unity-uitoolkit:sai.vn:supported:EveUnity `
|
||||
--expect-runtime-plugin-projection unity-uitoolkit:norn.graph:supported:EveUnity `
|
||||
--expect-runtime-plugin-projection unity-uitoolkit:tex.math:supported:EveUnity `
|
||||
|
|
@ -153,6 +163,10 @@ node $consumerScript $consumerExport `
|
|||
--expect-screenshot-metric web:sai-vn:structure:pass `
|
||||
--expect-screenshot-metric web:sai-vn:color-tokens:pass `
|
||||
--expect-screenshot-metric web:sai-vn:bounding-boxes:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:structure:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:color-tokens:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:text-presence:pass `
|
||||
--expect-screenshot-metric web:eve-world-smoke:bounding-boxes:pass `
|
||||
--expect-screenshot-metric unity-scene:aetheria-world:bounding-boxes:pending-capture `
|
||||
--expect-screenshot-metric electron-shell:aetheria-world:bounding-boxes:pending-capture `
|
||||
--expect-screenshot-metric tui:aetheria-world:bounding-boxes:terminal-grid-capture `
|
||||
|
|
|
|||
|
|
@ -222,6 +222,26 @@
|
|||
"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",
|
||||
|
|
@ -379,6 +399,27 @@
|
|||
"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",
|
||||
"requiredFixtures": ["eve-world-smoke"],
|
||||
"expectedSchemas": ["gamecult.eve.surface.v1", "gamecult.eve.command.v1", "eve.world_smoke.frame.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"
|
||||
]
|
||||
}
|
||||
],
|
||||
"pluginManifests": [
|
||||
|
|
@ -1102,14 +1143,15 @@
|
|||
"manifestPath": "web/eve-runtime-capability.json"
|
||||
},
|
||||
"semanticHarness": true,
|
||||
"requiredFixtures": ["embedded-surface"],
|
||||
"requiredFixtures": ["embedded-surface", "eve-world-smoke"],
|
||||
"pluginFixtures": ["sai-vn"],
|
||||
"supportedFeatures": ["embeddedDocuments", "providerAdvertisements", "stateBindings", "styleTokens", "authorityWitnesses"],
|
||||
"localProviderCatalog": {
|
||||
"path": "web/local-provider-catalog.json",
|
||||
"requiredProviders": ["aetheria", "repixelizer", "gamecult.home.vn"],
|
||||
"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"
|
||||
]
|
||||
|
|
@ -1138,7 +1180,8 @@
|
|||
"evidencePaths": [
|
||||
"web/surface.js",
|
||||
"packages/eve-browser-lowering/src/index.ts",
|
||||
"web/fixtures/aetheria.provider-advertisement.json"
|
||||
"web/fixtures/aetheria.provider-advertisement.json",
|
||||
"web/fixtures/eve-world-smoke.provider-advertisement.json"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -1153,11 +1196,11 @@
|
|||
},
|
||||
{
|
||||
"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", "requiresPlugins", "worldInteraction", "optional-nested", "aetheria.daemon.commands"]
|
||||
"contains": ["preserves Sai required and optional nested plugin requirements from advertisement", "merges local fixture transport with advertised Aetheria world interaction", "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", "repixelizer.provider-advertisement.json", "sai-vn.provider-advertisement.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",
|
||||
|
|
@ -1239,6 +1282,14 @@
|
|||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,8 @@
|
|||
"evidencePaths": [
|
||||
"web/surface.js",
|
||||
"packages/eve-browser-lowering/src/index.ts",
|
||||
"web/fixtures/aetheria.provider-advertisement.json"
|
||||
"web/fixtures/aetheria.provider-advertisement.json",
|
||||
"web/fixtures/eve-world-smoke.provider-advertisement.json"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
|
|||
19
web/fixtures/eve-world-smoke-surface.conformance.json
Normal file
19
web/fixtures/eve-world-smoke-surface.conformance.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"schema": "gamecult.eve.conformance_fixture.v1",
|
||||
"fixtureId": "eve-world-smoke",
|
||||
"title": "Generic Interactive World Smoke",
|
||||
"pack": "core",
|
||||
"ownerRepo": "Eve",
|
||||
"surface": {
|
||||
"transport": "local-json",
|
||||
"path": "web/fixtures/eve-world-smoke-surface.json"
|
||||
},
|
||||
"purpose": "Proves interactive-world lowering is provider-agnostic and does not require Aetheria product state.",
|
||||
"exitCriteria": "Stays in Eve core as the minimal control fixture for provider-owned world surface contracts.",
|
||||
"asserts": [
|
||||
"interactive-world surface shape",
|
||||
"provider-owned command boundary",
|
||||
"field.surface2d projection",
|
||||
"generic runtime lowering target coverage"
|
||||
]
|
||||
}
|
||||
114
web/fixtures/eve-world-smoke-surface.json
Normal file
114
web/fixtures/eve-world-smoke-surface.json
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
{
|
||||
"type": "surface-state",
|
||||
"schema": "gamecult.eve.surface.v1",
|
||||
"providerId": "eve.world-smoke",
|
||||
"providerKind": "contract.fixture",
|
||||
"title": "Generic Interactive World Smoke",
|
||||
"version": 1,
|
||||
"updatedAtUtc": "2026-07-09T00:00:00Z",
|
||||
"surface": {
|
||||
"id": "eve.world-smoke.surface",
|
||||
"root": {
|
||||
"id": "eve.world-smoke.root",
|
||||
"kind": "surface",
|
||||
"props": {},
|
||||
"children": [
|
||||
{
|
||||
"id": "eve.world-smoke.summary",
|
||||
"kind": "card",
|
||||
"props": {
|
||||
"title": "World Contract Control"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "eve.world-smoke.summary.text",
|
||||
"kind": "text",
|
||||
"props": {
|
||||
"text": "A tiny provider-owned world surface used to prove generic runtime lowering without Aetheria product state."
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "eve.world-smoke.tick",
|
||||
"kind": "metric",
|
||||
"props": {
|
||||
"label": "Tick",
|
||||
"bind": "eve.world-smoke.frame",
|
||||
"value": "42"
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "eve.world-smoke.field",
|
||||
"kind": "field.surface2d",
|
||||
"props": {
|
||||
"label": "Contract Field",
|
||||
"bind": "eve.world-smoke.field",
|
||||
"fieldId": "eve.world-smoke.contract-field",
|
||||
"fieldKind": "scalar2d",
|
||||
"bounds": "-128,-128,128,128",
|
||||
"bodies": "Beacon:0:0:90;Probe:48:-32:24",
|
||||
"objects": "beacon:0:0;probe:48:-32",
|
||||
"sampleCount": "16",
|
||||
"visualizer": "points"
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "eve.world-smoke.commands",
|
||||
"kind": "card",
|
||||
"props": {
|
||||
"title": "Command Boundary"
|
||||
},
|
||||
"children": [
|
||||
{
|
||||
"id": "eve.world-smoke.command.focus",
|
||||
"kind": "control.button",
|
||||
"props": {
|
||||
"label": "Focus Beacon",
|
||||
"command": "eve.world-smoke.commands",
|
||||
"commandId": "eve.world-smoke.focus",
|
||||
"action": {
|
||||
"target": "eve.world-smoke.commands",
|
||||
"operation": "focus_object",
|
||||
"objectId": "Beacon"
|
||||
}
|
||||
},
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "eve.world-smoke.authority",
|
||||
"kind": "text",
|
||||
"props": {
|
||||
"text": "The provider owns accepted state and receipts; runtimes only lower this command surface."
|
||||
},
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"styles": {
|
||||
"tokens": {
|
||||
"colorBackground": "#11161A",
|
||||
"colorPanel": "#263238",
|
||||
"colorText": "#EEF4F1",
|
||||
"colorMuted": "#9FB0AA",
|
||||
"colorAccent": "#7DC7B8",
|
||||
"fontBody": "Inter",
|
||||
"fontTitle": "Inter"
|
||||
}
|
||||
}
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"command": "eve.world-smoke.commands",
|
||||
"schema": "gamecult.eve.command.v1",
|
||||
"transport": "cultmesh",
|
||||
"authority": "eve.world-smoke.provider",
|
||||
"result": "accepted-denied-or-reconciled"
|
||||
}
|
||||
]
|
||||
}
|
||||
63
web/fixtures/eve-world-smoke.provider-advertisement.json
Normal file
63
web/fixtures/eve-world-smoke.provider-advertisement.json
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"schema": "gamecult.eve.provider_advertisement.v1",
|
||||
"providerId": "eve.world-smoke",
|
||||
"serviceId": "eve.world-smoke.service",
|
||||
"verseId": "eve.local",
|
||||
"rootVerse": "eve",
|
||||
"canonicalService": "eve.world-smoke",
|
||||
"locatedService": "eve.local",
|
||||
"cultMeshAddress": "cultmesh://eve.local/eve/providers/eve.world-smoke",
|
||||
"title": "Generic Interactive World Smoke",
|
||||
"kind": "contract.fixture",
|
||||
"updatedAtUtc": "2026-07-09T00:00:00Z",
|
||||
"freshness": {
|
||||
"state": "fixture",
|
||||
"lastSeenAtUtc": "2026-07-09T00:00:00Z",
|
||||
"maxAgeMs": 15000
|
||||
},
|
||||
"schemas": [
|
||||
"eve.world_smoke.frame.v1",
|
||||
"eve.world_smoke.command_receipt.v1",
|
||||
"gamecult.eve.surface.v1",
|
||||
"gamecult.eve.command.v1"
|
||||
],
|
||||
"witnesses": [
|
||||
{
|
||||
"kind": "fixture",
|
||||
"ref": "web/fixtures/eve-world-smoke-surface.json",
|
||||
"summary": "Minimal provider-owned interactive world surface used as a non-Aetheria runtime lowering control."
|
||||
}
|
||||
],
|
||||
"surfaces": [
|
||||
{
|
||||
"schema": "gamecult.eve.surface.v1",
|
||||
"surfaceId": "eve.world-smoke.surface",
|
||||
"key": "eve:surface:eve.world-smoke.surface",
|
||||
"transport": "cultmesh-record",
|
||||
"status": "available",
|
||||
"audience": "runtime-owner",
|
||||
"mode": "interactive",
|
||||
"surfaceKind": "interactive-world",
|
||||
"interactionModel": "provider-command-receipts",
|
||||
"worldInteraction": {
|
||||
"projectionKind": "provider-authored-world-surface",
|
||||
"stateSchemas": [
|
||||
"eve.world_smoke.frame.v1"
|
||||
],
|
||||
"commandBoundary": "eve.world-smoke.commands",
|
||||
"receiptSchema": "eve.world_smoke.command_receipt.v1",
|
||||
"loweringTargets": ["web-reference", "unity-uitoolkit", "unity-scene", "electron-shell", "tui"],
|
||||
"ownership": "provider-owns-world-state-and-command-receipts"
|
||||
},
|
||||
"summary": "Tiny contract fixture for proving runtime world-surface lowering without product-specific provider state."
|
||||
}
|
||||
],
|
||||
"commands": [
|
||||
{
|
||||
"command": "eve.world-smoke.commands",
|
||||
"schema": "gamecult.eve.command.v1",
|
||||
"transport": "cultmesh",
|
||||
"summary": "Fixture command boundary for provider-owned world command intents."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -15,6 +15,19 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"providerId": "eve.world-smoke",
|
||||
"title": "Generic Interactive World Smoke",
|
||||
"kind": "contract.fixture",
|
||||
"advertisement": "./fixtures/eve-world-smoke.provider-advertisement.json",
|
||||
"surfaces": [
|
||||
{
|
||||
"transport": "local-json",
|
||||
"surfaceId": "eve.world-smoke.surface",
|
||||
"url": "./fixtures/eve-world-smoke-surface.json"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"providerId": "repixelizer",
|
||||
"title": "Repixelizer",
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import { findProviderCatalogEntry, mergeProviderAdvertisement } from "./provider
|
|||
|
||||
const catalog = JSON.parse(readFileSync(new URL("./local-provider-catalog.json", import.meta.url), "utf8"));
|
||||
const aetheriaAdvertisement = JSON.parse(readFileSync(new URL("./fixtures/aetheria.provider-advertisement.json", import.meta.url), "utf8"));
|
||||
const worldSmokeAdvertisement = JSON.parse(readFileSync(new URL("./fixtures/eve-world-smoke.provider-advertisement.json", import.meta.url), "utf8"));
|
||||
const saiAdvertisement = JSON.parse(readFileSync(new URL("./fixtures/sai-vn.provider-advertisement.json", import.meta.url), "utf8"));
|
||||
|
||||
test("merges local fixture transport with advertised Aetheria world interaction", () => {
|
||||
|
|
@ -21,6 +22,20 @@ test("merges local fixture transport with advertised Aetheria world interaction"
|
|||
assert.equal(provider.localAdvertisement.providerId, "aetheria");
|
||||
});
|
||||
|
||||
test("merges generic world fixture transport with advertised world interaction", () => {
|
||||
const catalogProvider = findProviderCatalogEntry(catalog, "eve.world-smoke");
|
||||
const provider = mergeProviderAdvertisement(catalogProvider, worldSmokeAdvertisement);
|
||||
const surface = provider.surfaces.find(candidate => candidate.surfaceId === "eve.world-smoke.surface");
|
||||
|
||||
assert.equal(surface.transport, "local-json");
|
||||
assert.equal(surface.url, "./fixtures/eve-world-smoke-surface.json");
|
||||
assert.equal(surface.surfaceKind, "interactive-world");
|
||||
assert.equal(surface.worldInteraction.projectionKind, "provider-authored-world-surface");
|
||||
assert.equal(surface.worldInteraction.commandBoundary, "eve.world-smoke.commands");
|
||||
assert.equal(surface.worldInteraction.receiptSchema, "eve.world_smoke.command_receipt.v1");
|
||||
assert.deepEqual(surface.worldInteraction.loweringTargets, ["web-reference", "unity-uitoolkit", "unity-scene", "electron-shell", "tui"]);
|
||||
});
|
||||
|
||||
test("preserves Sai required and optional nested plugin requirements from advertisement", () => {
|
||||
const catalogProvider = findProviderCatalogEntry(catalog, "gamecult.home.vn");
|
||||
const provider = mergeProviderAdvertisement(catalogProvider, saiAdvertisement);
|
||||
|
|
|
|||
Loading…
Reference in a new issue