213 lines
9.3 KiB
JSON
213 lines
9.3 KiB
JSON
{
|
|
"schemaVersion": 2,
|
|
"matrixId": "BLENDER_WASM_CAPABILITY_MATRIX",
|
|
"status": "TEMPLATE",
|
|
"sourceOfTruth": "corrective capability evidence; legacy M16-GAP records remain immutable",
|
|
"queuePolicy": {
|
|
"mode": "SHADOW_ONLY",
|
|
"writesLegacyQueue": false,
|
|
"requiresGate": "G5",
|
|
"migrationPlan": "docs/BLENDER_WASM_CORRECTIVE_MIGRATION_PLAN.md"
|
|
},
|
|
"allowedParityLevels": ["L0", "L1", "L2", "L3", "L4", "L5"],
|
|
"allowedCompletionClasses": [
|
|
"FEATURE_PARITY",
|
|
"READ_COMPATIBILITY",
|
|
"NEGATIVE_BOUNDARY",
|
|
"METADATA_ONLY",
|
|
"UNSUPPORTED_DECLARED",
|
|
"BLOCKED",
|
|
"PLANNED"
|
|
],
|
|
"allowedLifecycleStatuses": ["planned", "in_progress", "blocked", "done"],
|
|
"allowedEvidenceStatuses": ["PASS", "FAIL", "BLOCKED", "NOT_RUN"],
|
|
"allowedProvenanceStates": ["VERIFIED", "DRIFT", "MISSING", "RESTORED", "BLOCKED_SOURCE_LOST"],
|
|
"fieldContracts": {
|
|
"capabilityId": "^CAP-[A-Z0-9]+(?:-[A-Z0-9]+)*$",
|
|
"family": "stable capability family, not a legacy task name",
|
|
"parityLevel": "highest level fully proven by the evidence, never the target level",
|
|
"targetParityLevel": "planned level; never used as completion evidence",
|
|
"completionClass": "must agree with evidence and lifecycleStatus",
|
|
"sourceGaps": "zero or more immutable M16-GAP IDs; references only",
|
|
"productionEntrypoints": "files that changed or were explicitly checked",
|
|
"evidence": "all required receipts, reports, hashes, and focused commands",
|
|
"provenanceState": "artifact provenance; observed hash never replaces original hash",
|
|
"migration": "shadow mapping; no queue write before C6-003"
|
|
},
|
|
"requiredFields": [
|
|
"capabilityId",
|
|
"lifecycleStatus",
|
|
"family",
|
|
"primaryBehavior",
|
|
"parityLevel",
|
|
"targetParityLevel",
|
|
"completionClass",
|
|
"sourceGaps",
|
|
"desktopOracle",
|
|
"wasmCommand",
|
|
"productionEntrypoints",
|
|
"positiveCases",
|
|
"negativeCases",
|
|
"persistenceCases",
|
|
"undoRedoCases",
|
|
"resourceCases",
|
|
"owner",
|
|
"dependencies",
|
|
"gate"
|
|
,"evidence"
|
|
,"expectedMutation"
|
|
,"migration"
|
|
],
|
|
"entryTemplate": {
|
|
"capabilityId": "CAP-REPLACE-ME",
|
|
"lifecycleStatus": "planned",
|
|
"family": "REPLACE_ME",
|
|
"primaryBehavior": "REPLACE_ME",
|
|
"parityLevel": "L0",
|
|
"targetParityLevel": "L2",
|
|
"completionClass": "PLANNED",
|
|
"sourceGaps": [],
|
|
"desktopOracle": {
|
|
"fixture": "tests/files/web/corrective/REPLACE_ME.blend",
|
|
"command": "REPLACE_ME",
|
|
"positiveRequired": false,
|
|
"negativeRequired": ["malformed", "invalid_context"]
|
|
},
|
|
"wasmCommand": {
|
|
"type": "REPLACE_ME",
|
|
"schemaVersion": 1,
|
|
"status": "PLANNED",
|
|
"requires": ["baseRevision", "context"]
|
|
},
|
|
"productionEntrypoints": [],
|
|
"positiveCases": [],
|
|
"negativeCases": [],
|
|
"persistenceCases": [],
|
|
"undoRedoCases": [],
|
|
"resourceCases": [],
|
|
"expectedMutation": {
|
|
"positiveStatus": "FINISHED",
|
|
"mainMutation": "CHANGED",
|
|
"revisionDelta": 1,
|
|
"failureRevisionDelta": 0
|
|
},
|
|
"evidence": {
|
|
"status": "NOT_RUN",
|
|
"provenanceState": "MISSING",
|
|
"required": ["desktopReport", "wasmReport", "focusedCommands", "artifactHashes"],
|
|
"desktopReport": null,
|
|
"wasmReport": null,
|
|
"focusedCommands": [],
|
|
"artifactHashes": [],
|
|
"chromiumTest": null
|
|
},
|
|
"migration": {
|
|
"state": "UNMAPPED",
|
|
"primaryLegacyGaps": [],
|
|
"coverageCases": [],
|
|
"supersedes": [],
|
|
"legacyCompletionPreserved": true,
|
|
"reviewRequired": true
|
|
},
|
|
"owner": "REPLACE_ME",
|
|
"dependencies": [],
|
|
"gate": "G1"
|
|
},
|
|
"entries": [
|
|
{
|
|
"capabilityId": "CAP-ASSET-CATALOG-MUTATION",
|
|
"lifecycleStatus": "planned",
|
|
"family": "ASSET_CATALOG",
|
|
"primaryBehavior": "create_or_update_catalog_and_save",
|
|
"parityLevel": "L0",
|
|
"targetParityLevel": "L4",
|
|
"completionClass": "PLANNED",
|
|
"sourceGaps": [
|
|
"operator:asset.catalog_new",
|
|
"operator:asset.catalog_delete",
|
|
"operator:asset.catalogs_save",
|
|
"operator:asset.catalog_undo",
|
|
"operator:asset.catalog_redo"
|
|
],
|
|
"desktopOracle": {
|
|
"operatorIds": [
|
|
"ASSET_OT_catalog_new",
|
|
"ASSET_OT_catalog_delete",
|
|
"ASSET_OT_catalogs_save"
|
|
],
|
|
"positiveRequired": true,
|
|
"negativeRequired": ["no_context", "read_only_library", "missing_resource"]
|
|
},
|
|
"wasmCommand": {
|
|
"type": "assetCatalogMutation",
|
|
"status": "PLANNED",
|
|
"requires": ["activeAssetLibrary", "baseRevision", "resourceProvider"]
|
|
},
|
|
"productionEntrypoints": [
|
|
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
|
"blender-5.2.0/source/blender/web_engine/web_engine_api.h",
|
|
"web/engine/web_engine_main_state.cpp"
|
|
],
|
|
"positiveCases": ["create", "rename", "delete", "save"],
|
|
"negativeCases": ["malformed", "unsupported", "revision_conflict"],
|
|
"persistenceCases": ["save_reopen_catalog_and_main"],
|
|
"undoRedoCases": ["catalog_undo", "catalog_redo"],
|
|
"resourceCases": ["external_required", "packed", "path_rejection"],
|
|
"owner": "WEB_ENGINE_AND_ASSET_WORKFLOW",
|
|
"dependencies": ["C2-001", "C2-002", "C2-003"],
|
|
"gate": "G3"
|
|
,"expectedMutation": {"positiveStatus": "FINISHED", "mainMutation": "CHANGED", "revisionDelta": 1, "failureRevisionDelta": 0}
|
|
,"evidence": {"status": "NOT_RUN", "provenanceState": "MISSING", "required": ["desktopReport", "wasmReport", "focusedCommands", "artifactHashes", "chromiumTest"], "desktopReport": null, "wasmReport": null, "focusedCommands": [], "artifactHashes": [], "chromiumTest": null}
|
|
,"migration": {"state": "UNMAPPED", "primaryLegacyGaps": ["operator:asset.catalog_new", "operator:asset.catalog_delete", "operator:asset.catalogs_save", "operator:asset.catalog_undo", "operator:asset.catalog_redo"], "coverageCases": [], "supersedes": [], "legacyCompletionPreserved": true, "reviewRequired": true}
|
|
},
|
|
{
|
|
"capabilityId": "CAP-MODIFIER-STATE-MUTATION",
|
|
"lifecycleStatus": "planned",
|
|
"family": "MODIFIER",
|
|
"primaryBehavior": "toggle_modifier_state_and_persist",
|
|
"parityLevel": "L0",
|
|
"targetParityLevel": "L3",
|
|
"completionClass": "PLANNED",
|
|
"sourceGaps": ["modifier:state", "operator:object.modifier_toggle"],
|
|
"desktopOracle": {"positiveRequired": true, "negativeRequired": ["missing_modifier", "invalid_context"]},
|
|
"wasmCommand": {"type": "setModifierEnabled", "status": "EXISTING", "requires": ["meshId", "modifierUuid", "baseRevision"]},
|
|
"productionEntrypoints": ["blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"],
|
|
"positiveCases": ["enable", "disable", "save_reopen"],
|
|
"negativeCases": ["invalid_uuid", "revision_conflict", "malformed"],
|
|
"persistenceCases": ["save_reopen_modifier_state"],
|
|
"undoRedoCases": ["undo", "redo"],
|
|
"resourceCases": [],
|
|
"owner": "WEB_ENGINE_MAIN",
|
|
"dependencies": ["C2-001", "C2-002", "C2-003"],
|
|
"gate": "G4"
|
|
,"expectedMutation": {"positiveStatus": "FINISHED", "mainMutation": "CHANGED", "revisionDelta": 1, "failureRevisionDelta": 0}
|
|
,"evidence": {"status": "NOT_RUN", "provenanceState": "MISSING", "required": ["desktopReport", "wasmReport", "focusedCommands", "artifactHashes", "chromiumTest"], "desktopReport": null, "wasmReport": null, "focusedCommands": [], "artifactHashes": [], "chromiumTest": null}
|
|
,"migration": {"state": "UNMAPPED", "primaryLegacyGaps": ["modifier:state", "operator:object.modifier_toggle"], "coverageCases": [], "supersedes": [], "legacyCompletionPreserved": true, "reviewRequired": true}
|
|
},
|
|
{
|
|
"capabilityId": "CAP-MESH-POSITIVE-EDIT",
|
|
"lifecycleStatus": "planned",
|
|
"family": "MESH",
|
|
"primaryBehavior": "perform_one_atomic_mesh_edit",
|
|
"parityLevel": "L0",
|
|
"targetParityLevel": "L3",
|
|
"completionClass": "PLANNED",
|
|
"sourceGaps": ["mesh:edit", "operator:mesh.edit"],
|
|
"desktopOracle": {"positiveRequired": true, "negativeRequired": ["invalid_selection", "unsupported_topology"]},
|
|
"wasmCommand": {"type": "meshEdit", "status": "PLANNED", "requires": ["meshId", "baseRevision", "selection"]},
|
|
"productionEntrypoints": ["blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "web/engine/web_engine_main_state.cpp"],
|
|
"positiveCases": ["edit", "delta", "save_reopen"],
|
|
"negativeCases": ["invalid_selection", "revision_conflict", "malformed"],
|
|
"persistenceCases": ["save_reopen_geometry"],
|
|
"undoRedoCases": ["undo", "redo"],
|
|
"resourceCases": [],
|
|
"owner": "WEB_ENGINE_MAIN",
|
|
"dependencies": ["C2-001", "C2-002", "C2-003"],
|
|
"gate": "G4"
|
|
,"expectedMutation": {"positiveStatus": "FINISHED", "mainMutation": "CHANGED", "revisionDelta": 1, "failureRevisionDelta": 0}
|
|
,"evidence": {"status": "NOT_RUN", "provenanceState": "MISSING", "required": ["desktopReport", "wasmReport", "focusedCommands", "artifactHashes", "chromiumTest"], "desktopReport": null, "wasmReport": null, "focusedCommands": [], "artifactHashes": [], "chromiumTest": null}
|
|
,"migration": {"state": "UNMAPPED", "primaryLegacyGaps": ["mesh:edit", "operator:mesh.edit"], "coverageCases": [], "supersedes": [], "legacyCompletionPreserved": true, "reviewRequired": true}
|
|
}
|
|
]
|
|
}
|