diff --git a/docs/eve-migration-roadmap.md b/docs/eve-migration-roadmap.md index 0128ea0..d873557 100644 --- a/docs/eve-migration-roadmap.md +++ b/docs/eve-migration-roadmap.md @@ -591,6 +591,9 @@ Recently cut: from the exported evidence. The generic consumer smoke asserts it with `--expect-capability-matrix`, so owner repos do not need to scrape the Markdown report or rebuild Eve's summary logic to understand coverage. +- The capability matrix projection now has a catalog-backed schema document at + `schemas/gamecult.eve.capability_matrix.v1.schema.json`, and the generic + conformance consumer asserts that schema from the exported pack. - Conformance export now copies handoff documents into `handoffs/*.json` rather than exporting Eve-local source paths only. The export carries handoff export paths for EveConformance, Sai/Norn plugins, Aetheria, and EveUnity; the diff --git a/schemas/gamecult.eve.capability_matrix.v1.schema.json b/schemas/gamecult.eve.capability_matrix.v1.schema.json new file mode 100644 index 0000000..bd354d5 --- /dev/null +++ b/schemas/gamecult.eve.capability_matrix.v1.schema.json @@ -0,0 +1,133 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "gamecult.eve.capability_matrix.v1", + "title": "Eve Capability Matrix", + "type": "object", + "required": [ + "schema", + "generatedAt", + "summary", + "capabilityGapCount", + "handoffs", + "packs", + "plugins", + "providers", + "runtimes", + "splitTargets" + ], + "properties": { + "schema": { + "const": "gamecult.eve.capability_matrix.v1" + }, + "generatedAt": { + "type": "string", + "minLength": 1 + }, + "summary": { + "type": "object" + }, + "capabilityGapCount": { + "type": "integer", + "minimum": 0 + }, + "handoffs": { + "type": "object", + "required": [ + "conformance", + "plugins", + "providers", + "runtimes" + ], + "properties": { + "conformance": { + "type": "integer", + "minimum": 0 + }, + "plugins": { + "type": "integer", + "minimum": 0 + }, + "providers": { + "type": "integer", + "minimum": 0 + }, + "runtimes": { + "type": "integer", + "minimum": 0 + } + }, + "additionalProperties": true + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "required": [ + "packId", + "ownerRepo", + "fixtureCount", + "passedFixtures", + "failedFixtures" + ], + "additionalProperties": true + } + }, + "plugins": { + "type": "array", + "items": { + "type": "object", + "required": [ + "pluginId", + "ownerRepo", + "status", + "capabilities", + "abiOperations" + ], + "additionalProperties": true + } + }, + "providers": { + "type": "array", + "items": { + "type": "object", + "required": [ + "providerId", + "ownerRepo", + "status", + "surfaces", + "commands" + ], + "additionalProperties": true + } + }, + "runtimes": { + "type": "array", + "items": { + "type": "object", + "required": [ + "runtimeId", + "ownerRepo", + "status", + "supportedFeatures", + "captureStatus" + ], + "additionalProperties": true + } + }, + "splitTargets": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "ownerRepo", + "status", + "blockerCount", + "passedProofs" + ], + "additionalProperties": true + } + } + }, + "additionalProperties": true +} diff --git a/scripts/run-conformance-consumer-smoke.ps1 b/scripts/run-conformance-consumer-smoke.ps1 index ecbecb8..8c565a6 100644 --- a/scripts/run-conformance-consumer-smoke.ps1 +++ b/scripts/run-conformance-consumer-smoke.ps1 @@ -33,6 +33,7 @@ try { node .\tools\conformance\consume-export.mjs $consumerExport ` --expect-capability-matrix ` --expect-schema gamecult.eve.conformance_export.v1 ` + --expect-schema gamecult.eve.capability_matrix.v1 ` --expect-schema gamecult.eve.command_receipt.v1 ` --expect-schema gamecult.eve.plugin_receipt.v1 ` --expect-schema gamecult.eve.plugin_abi.request.v1 ` diff --git a/scripts/run-eveconformance-handoff-smoke.ps1 b/scripts/run-eveconformance-handoff-smoke.ps1 index ade1a23..4c5bd64 100644 --- a/scripts/run-eveconformance-handoff-smoke.ps1 +++ b/scripts/run-eveconformance-handoff-smoke.ps1 @@ -75,6 +75,7 @@ foreach ($contract in @( "gamecult.eve.command.v1", "gamecult.eve.command_receipt.v1", "gamecult.eve.conformance_export.v1", + "gamecult.eve.capability_matrix.v1", "gamecult.eve.conformance_fixture.v1", "gamecult.eve.provider_scenario.v1", "gamecult.eve.plugin.v1", @@ -112,6 +113,7 @@ if (Test-Path -LiteralPath (Join-Path $absoluteExportDirectory "index.json")) { } foreach ($schemaId in @( "gamecult.eve.conformance_export.v1", + "gamecult.eve.capability_matrix.v1", "gamecult.eve.conformance_fixture.v1", "gamecult.eve.provider_scenario.v1", "gamecult.eve.provider_advertisement.v1", diff --git a/tools/conformance/eveconformance-handoff.json b/tools/conformance/eveconformance-handoff.json index 8029ee2..7a11279 100644 --- a/tools/conformance/eveconformance-handoff.json +++ b/tools/conformance/eveconformance-handoff.json @@ -20,6 +20,7 @@ "destinationOwner": "EveConformance", "currentPaths": [ "schemas/gamecult.eve.conformance_export.v1.schema.json", + "schemas/gamecult.eve.capability_matrix.v1.schema.json", "schemas/gamecult.eve.conformance_fixture.v1.schema.json", "schemas/gamecult.eve.provider_scenario.v1.schema.json", "schemas/gamecult.eve.provider_advertisement.v1.schema.json", @@ -67,6 +68,7 @@ "gamecult.eve.command.v1", "gamecult.eve.command_receipt.v1", "gamecult.eve.conformance_export.v1", + "gamecult.eve.capability_matrix.v1", "gamecult.eve.conformance_fixture.v1", "gamecult.eve.provider_scenario.v1", "gamecult.eve.plugin.v1", diff --git a/tools/parity/parity-manifest.json b/tools/parity/parity-manifest.json index f30b525..ae7fc5c 100644 --- a/tools/parity/parity-manifest.json +++ b/tools/parity/parity-manifest.json @@ -9,6 +9,7 @@ "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",