diff --git a/docs/eve-migration-roadmap.md b/docs/eve-migration-roadmap.md index f969f38..f6f3b2b 100644 --- a/docs/eve-migration-roadmap.md +++ b/docs/eve-migration-roadmap.md @@ -1002,6 +1002,11 @@ Recently cut: `web-reference`, `unity-uitoolkit`, `unity-scene`, `electron-shell`, and `tui` lower the same provider-owned world/command boundary without importing Aetheria product state. +- That generic world fixture now has its own provider scenario at + `web/fixtures/eve-world-smoke-scenario.json`. The scenario advertises + accepted and denied command receipts through + `eve.world_smoke.command_receipt.v1`, so replay proof is no longer only an + Aetheria product concern. - 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 diff --git a/scripts/run-conformance-consumer-smoke.ps1 b/scripts/run-conformance-consumer-smoke.ps1 index 9759321..430bc1e 100644 --- a/scripts/run-conformance-consumer-smoke.ps1 +++ b/scripts/run-conformance-consumer-smoke.ps1 @@ -59,6 +59,7 @@ try { --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-scenario eve-world-smoke-command-replay ` --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 ` diff --git a/tools/parity/parity-manifest.json b/tools/parity/parity-manifest.json index bd514d5..fc43738 100644 --- a/tools/parity/parity-manifest.json +++ b/tools/parity/parity-manifest.json @@ -409,8 +409,9 @@ "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"], + "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" @@ -418,7 +419,8 @@ "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-surface.conformance.json", + "web/fixtures/eve-world-smoke-scenario.json" ] } ], diff --git a/web/fixtures/eve-world-smoke-scenario.json b/web/fixtures/eve-world-smoke-scenario.json new file mode 100644 index 0000000..0fd3d68 --- /dev/null +++ b/web/fixtures/eve-world-smoke-scenario.json @@ -0,0 +1,62 @@ +{ + "schema": "gamecult.eve.provider_scenario.v1", + "scenarioId": "eve-world-smoke-command-replay", + "providerId": "eve.world-smoke", + "ownerRepo": "Eve", + "advertisementPath": "web/fixtures/eve-world-smoke.provider-advertisement.json", + "surfaceFixture": "eve-world-smoke", + "purpose": "Proves interactive-world command replay without depending on Aetheria product state.", + "requires": { + "fixtures": ["eve-world-smoke"], + "surfaces": ["eve.world-smoke.surface"], + "worldSurfaces": [ + { + "surfaceId": "eve.world-smoke.surface", + "surfaceKind": "interactive-world", + "projectionKind": "provider-authored-world-surface", + "commandBoundary": "eve.world-smoke.commands", + "receiptSchema": "eve.world_smoke.command_receipt.v1" + } + ], + "commands": ["eve.world-smoke.commands"], + "schemas": ["gamecult.eve.surface.v1", "gamecult.eve.command.v1", "eve.world_smoke.command_receipt.v1"] + }, + "commandIntents": [ + { + "command": "eve.world-smoke.commands", + "commandId": "eve.world-smoke.focus", + "operation": "focus_object", + "payload": { + "objectId": "Beacon" + } + }, + { + "command": "eve.world-smoke.commands", + "commandId": "eve.world-smoke.reject-unknown", + "operation": "focus_object", + "payload": { + "objectId": "Unknown" + } + } + ], + "expectedReceipts": [ + { + "receiptId": "eve.world-smoke.focus.accepted", + "command": "eve.world-smoke.commands", + "commandId": "eve.world-smoke.focus", + "state": "accepted", + "authority": "eve.world-smoke.provider", + "ownerRepo": "Eve", + "schema": "eve.world_smoke.command_receipt.v1" + }, + { + "receiptId": "eve.world-smoke.reject-unknown.denied", + "command": "eve.world-smoke.commands", + "commandId": "eve.world-smoke.reject-unknown", + "state": "denied", + "authority": "eve.world-smoke.provider", + "ownerRepo": "Eve", + "schema": "eve.world_smoke.command_receipt.v1" + } + ] +} diff --git a/web/fixtures/eve-world-smoke.provider-advertisement.json b/web/fixtures/eve-world-smoke.provider-advertisement.json index 6cbd8c8..9d7a93c 100644 --- a/web/fixtures/eve-world-smoke.provider-advertisement.json +++ b/web/fixtures/eve-world-smoke.provider-advertisement.json @@ -59,5 +59,13 @@ "transport": "cultmesh", "summary": "Fixture command boundary for provider-owned world command intents." } + ], + "conformanceScenarios": [ + { + "scenarioId": "eve-world-smoke-command-replay", + "schema": "gamecult.eve.provider_scenario.v1", + "path": "web/fixtures/eve-world-smoke-scenario.json", + "summary": "Minimal interactive world replay through provider advertisement, command intent, and provider-owned receipts." + } ] }