Add generic world surface control fixture

This commit is contained in:
Meta Vens 2026-07-09 16:44:14 +01:00
commit 071c5aef76
11 changed files with 330 additions and 6 deletions

View file

@ -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

View file

@ -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 `

View file

@ -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

View file

@ -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 `

View file

@ -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"
}
]
}

View file

@ -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"
]
}
],

View 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"
]
}

View 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"
}
]
}

View 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."
}
]
}

View file

@ -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",

View file

@ -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);